[cig-commits] r12991 - in long/3D/SNAC/trunk: . StGermain StGermain/Base StGermain/Base/Automation StGermain/Base/Automation/src StGermain/Base/Automation/tests StGermain/Base/Automation/tests/data StGermain/Base/Container StGermain/Base/Container/src StGermain/Base/Container/tests StGermain/Base/Context StGermain/Base/Context/Python StGermain/Base/Context/src StGermain/Base/Context/tests StGermain/Base/Extensibility StGermain/Base/Extensibility/distributedtests StGermain/Base/Extensibility/distributedtests/data StGermain/Base/Extensibility/distributedtests/testplugins StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep StGermain/Base/Extensibility/src StGermain/Base/Extensibility/tests StGermain/Base/FlattenXML StGermain/Base/FlattenXML/src StGermain/Base/FlattenXML/test StGermain/Base/FlattenXML/test/data StGermain/Base/FlattenXML/test/expected StGermain/Base/Foundation StGermain/Base/Foundation/src StGermain/Base/Foundation/tests StGermain/Base/IO StGermain/Base/IO/Python StGermain/Base/IO/src StGermain/Base/IO/src/mpirecord StGermain/Base/IO/src/mpirecord/none StGermain/Base/IO/src/mpirecord/profile StGermain/Base/IO/tests StGermain/Base/IO/tests/data StGermain/Base/IO/tests/data/subdir StGermain/Base/IO/tests/data/subdir/another StGermain/Base/ListPlugins StGermain/Base/ListPlugins/src StGermain/Base/ListPlugins/tests StGermain/Base/ListPlugins/tests/data StGermain/Base/Python StGermain/Base/Python/Bindings StGermain/Base/Python/Bindings/Context StGermain/Base/Python/Bindings/Dictionary StGermain/Base/src StGermain/Base/tests StGermain/Discretisation StGermain/Discretisation/Geometry StGermain/Discretisation/Geometry/src StGermain/Discretisation/Geometry/tests StGermain/Discretisation/Geometry/tests/data StGermain/Discretisation/Mesh StGermain/Discretisation/Mesh/Python StGermain/Discretisation/Mesh/src StGermain/Discretisation/Mesh/tests StGermain/Discretisation/Mesh/tests/data StGermain/Discretisation/Python StGermain/Discretisation/Python/Bindings StGermain/Discretisation/Python/Bindings/Mesh StGermain/Discretisation/Shape StGermain/Discretisation/Shape/src StGermain/Discretisation/Shape/tests StGermain/Discretisation/Shape/tests/expected StGermain/Discretisation/Shape/tests/output StGermain/Discretisation/Swarm StGermain/Discretisation/Swarm/src StGermain/Discretisation/Swarm/tests StGermain/Discretisation/Swarm/tests/Bouncer StGermain/Discretisation/Swarm/tests/SingleAttractor StGermain/Discretisation/Swarm/tests/Spinner StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors StGermain/Discretisation/Swarm/tests/expected StGermain/Discretisation/Utils StGermain/Discretisation/Utils/src StGermain/Discretisation/Utils/tests StGermain/Discretisation/Utils/tests/data StGermain/Discretisation/Utils/tests/expected StGermain/Discretisation/src StGermain/Discretisation/tests StGermain/FD StGermain/FD/Python StGermain/FD/Python/Bindings StGermain/FD/Python/Bindings/MeshContext StGermain/FD/src StGermain/FD/tests StGermain/Regresstor StGermain/Regresstor/ClientPrograms StGermain/Regresstor/ClientPrograms/checkDiff StGermain/Regresstor/ClientPrograms/checkExecution StGermain/Regresstor/ClientPrograms/endRun StGermain/Regresstor/ClientPrograms/startRun StGermain/Regresstor/ClientPrograms/submitBuild StGermain/Regresstor/RegresstorMail StGermain/Regresstor/RegresstorServices StGermain/Regresstor/libRegresstor StGermain/Regresstor/libRegresstor/src StGermain/Regresstor/tools StGermain/Services StGermain/Services/BinaryDownload StGermain/Services/Common StGermain/Services/Common/tests StGermain/Services/tests StGermain/VMake StGermain/VMake/Commands StGermain/VMake/Config StGermain/VMake/Config/OpenGl StGermain/VMake/Config/PETSc StGermain/VMake/Config/PICellerator StGermain/VMake/Config/StGermain StGermain/VMake/Config/StgFEM StGermain/VMake/Config/Underworld StGermain/VMake/Config/X11 StGermain/VMake/Config/Xanthus StGermain/VMake/Config/glucifer StGermain/VMake/Config/mpi StGermain/VMake/Config/python StGermain/VMake/Config/python-compile StGermain/VMake/Initialise StGermain/VMake/Rules StGermain/VMake/SystemTests StGermain/VMake/SystemTests/C-CompilerType StGermain/VMake/SystemTests/CXX-CompilerType StGermain/VMake/SystemTests/Endian StGermain/VMake/SystemTests/Fortran-CompilerType StGermain/VMake/SystemTests/Fortran-Symbol StGermain/VMake/SystemTests/LongSize StGermain/Viewers StGermain/Viewers/MeshLayoutViewer StGermain/Viewers/MeshLayoutViewer/MLGen StGermain/Viewers/MeshLayoutViewer/MLView StGermain/Viewers/MeshLayoutViewer/src StGermain/Viewers/MeshViewer StGermain/Viewers/MeshViewer/src StGermain/compatibility StGermain/compatibility/libmpi StGermain/compatibility/libpetsc StGermain/compatibility/libpmpich StGermain/compatibility/libpython StGermain/compatibility/mpipython StGermain/doc StGermain/libStGermain StGermain/libStGermain/Python StGermain/libStGermain/Python/Bindings StGermain/libStGermain/Python/Bindings/General StGermain/libStGermain/Python/Bindings/MPI StGermain/libStGermain/dynamic StGermain/libStGermain/src StGermain/libStGermain/static StGermain/libStGermain/tests StGermain/libStGermain/testsDynamic StGermain/libStGermainAll StGermain/libStGermainAll/dynamic StGermain/libStGermainAll/src StGermain/libStGermainAll/static StGermain/libStGermainAll/tests StGermain/libStGermainAll/testsDynamic StGermain/pyre StGermain/pyre/Bindings StGermain/pyre/Bindings/pyre StGermain/pyre/Mesh StGermain/src

ces74 at geodynamics.org ces74 at geodynamics.org
Fri Oct 3 10:12:00 PDT 2008


Author: ces74
Date: 2008-10-03 10:11:55 -0700 (Fri, 03 Oct 2008)
New Revision: 12991

Added:
   long/3D/SNAC/trunk/StGermain/
   long/3D/SNAC/trunk/StGermain/.cvsignore
   long/3D/SNAC/trunk/StGermain/Base/
   long/3D/SNAC/trunk/StGermain/Base/Automation/
   long/3D/SNAC/trunk/StGermain/Base/Automation/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Automation/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Automation/makefile
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Automation.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.meta
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/offsets.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/copy.xml
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/metatest.xml
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/setVC.xml
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Short.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableAllVC.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCondition_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableCopy.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableDumpStream.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariableValueCompare.c
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Container/
   long/3D/SNAC/trunk/StGermain/Base/Container/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Container/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Container/makefile
   long/3D/SNAC/trunk/StGermain/Base/Container/src/
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Array.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTree.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeIterator.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/BTreeNode.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Container.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTable.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/HashTableIterator.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Heap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexMap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/IndexSet.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedList.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListIterator.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/LinkedListNode.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/List.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/List.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MPIRoutines.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Map.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MaxHeap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/MemoryPool.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrMap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/PtrSet.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/RangeSet.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/Set.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/UIntMap.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.c
   long/3D/SNAC/trunk/StGermain/Base/Container/src/UniqueList.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Container/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Container/src/units.h
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/dictionary.txt
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testArray.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testBTree.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testHashTable.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAccess.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet-badAssign.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testIndexSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedList.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testLinkedListIterator.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testList.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.0of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.1of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.2of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMPIRoutines.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMaxHeap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testMemoryPool.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testPtrSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testRangeSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testSet.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.0of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.1of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.expected
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.2of3.sh
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUIntMap.c
   long/3D/SNAC/trunk/StGermain/Base/Container/tests/testUniqueList.c
   long/3D/SNAC/trunk/StGermain/Base/Context/
   long/3D/SNAC/trunk/StGermain/Base/Context/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Context/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/Context.py
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Base/Context/Python/makefile
   long/3D/SNAC/trunk/StGermain/Base/Context/makefile
   long/3D/SNAC/trunk/StGermain/Base/Context/src/
   long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/AbstractContext.meta
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Context.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/ContextEntryPoint.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/DictionaryCheck.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Context/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Context/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Context/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Context/src/units.h
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/output/
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noDtDefined.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext-noOptionsDefined.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext0.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContext1.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testAbstractContextCheckPoint.c
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.DictionaryCheck.txt.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Context/tests/testDictionaryCheck.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/MockContext.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalDepPlugins.xml
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/data/testLocalPlugin.xml
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-Local.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin-LocalDep.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testDistributedPlugin.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testPlugin.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/LocalPlugin.xml
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPlugin/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin1.meta
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/LocalPlugin2.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/LocalPluginDep/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/RemotePlugin1.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/distributedtests/testplugins/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassHook.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ClassPtrExtensionInfo.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Codelet.meta
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/EntryPoint_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Extensibility.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionInfo.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/ExtensionManager_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Hook.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginLoader.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/PluginsManager.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/SimpleExtensionInfo.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-ClassHook.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-min-max.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint-printConcise.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint0.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint1.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint2.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testEntryPoint3.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofObject.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtension-ofStruct.c
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Extensibility/tests/testExtensionSimple.c
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/makefile
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/main.c
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1-include.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include1.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include2.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/include3.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/data/testInput.xml
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/expected/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/expected/testFlattenXML.0of1.output.xml.expected
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/log/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/makefile
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/output/
   long/3D/SNAC/trunk/StGermain/Base/FlattenXML/test/testFlattenXML.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/
   long/3D/SNAC/trunk/StGermain/Base/Foundation/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Foundation/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Foundation/makefile
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Class.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/CommonRoutines.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Foundation.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemMonitor.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Memory.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryField.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryPointer.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryReport.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/MemoryTag.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/NamedObject_Register.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/Object.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectAdaptor.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/ObjectList.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/PrimitiveObject.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TestSuite.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/TimeMonitor.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/forwardDecl.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/BTreeWrappers.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/JournalWrappers.h
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/PtrMapWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testCommonRoutines.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemMonitor.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory0.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory1.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArray.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DArrayAs1D.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory2DComplex.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArray.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DArrayAs1D.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory3DComplex.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArray.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemory4DArrayAs1D.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testMemoryRealloc.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testNamedObject_Register.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testObjectList.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testPrimitiveObject.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testStg_asprintf.c
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Foundation/tests/testTimeMonitor.c
   long/3D/SNAC/trunk/StGermain/Base/IO/
   long/3D/SNAC/trunk/StGermain/Base/IO/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/IO/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/Dictionary.py
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Base/IO/Python/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/
   long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/CFile.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/CStream.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Dictionary_Entry_Value.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IO.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IO_Handler.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/IndentFormatter.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Journal.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/JournalFile.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/LineFormatter.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIFile.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/MPIStream.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/PathUtils.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/RankFormatter.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/Stream.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/StreamFormatter.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/XML_IO_Handler.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/none/mpimessaging.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/mpimessaging.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/mpirecord/profile/stgmessaging.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Base/IO/src/stgmessaging.c
   long/3D/SNAC/trunk/StGermain/Base/IO/src/types.h
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/BTreeWrappers.h
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/PtrMapWrappers.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/duplicate.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/empty.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/invalid.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/journal.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/mpi-stream.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/normal.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/rawdata.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/subdir/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/subdir/another/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/subdir/another/empty2.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_namespace.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/data/wrong_root_node.xml
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/output/
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.dictionaryOutput.dat.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-commandLine.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-merge.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary-shortcuts.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testDictionary.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-commandLine.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-duplicate.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-file_sanity.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-normal.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testIO_Handler-raw_data.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Dictionary.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal-Firewall.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournal1.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testJournalShortcuts.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi1.txt.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.0of2.test-mpi2.txt.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testMPIStream.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testPathUtils.c
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.expected
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.0of2.sh
   long/3D/SNAC/trunk/StGermain/Base/IO/tests/testRankFormatter.c
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/makefile
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/main.c
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/data/
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/data/pluginstest.xml
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/ListPlugins/tests/testListPlugins.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/bindings.h
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/init.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/makefile
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Context/misc.h
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/bindings.h
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/init.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/makefile
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.c
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Dictionary/misc.h
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/Base/Python/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/Base/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Base/Python/makefile
   long/3D/SNAC/trunk/StGermain/Base/makefile
   long/3D/SNAC/trunk/StGermain/Base/src/
   long/3D/SNAC/trunk/StGermain/Base/src/Base.h
   long/3D/SNAC/trunk/StGermain/Base/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Base/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Base/src/Init.c
   long/3D/SNAC/trunk/StGermain/Base/src/Init.h
   long/3D/SNAC/trunk/StGermain/Base/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/src/makefile
   long/3D/SNAC/trunk/StGermain/Base/tests/
   long/3D/SNAC/trunk/StGermain/Base/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Base/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Base/tests/makefile
   long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.expected
   long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.0of1.sh
   long/3D/SNAC/trunk/StGermain/Base/tests/testLibBase.c
   long/3D/SNAC/trunk/StGermain/COPYING
   long/3D/SNAC/trunk/StGermain/Discretisation/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/BlockGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ComplexVectorMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Delaunay.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Dimension.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Edge.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/FullTensorMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Geometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/GeometryClass.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK26Topology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJK6Topology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IJKTopology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/IrregTopology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Line.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ParallelDelaunay.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Plane.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/QuadEdge.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RMatrix.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/RefinedRegionsGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/ShellGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TensorMultMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/Topology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/TrigMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/VectorMath.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/isinf.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/stg_lapack.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/src/units.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/data/
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/data/points.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testBlockGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testComplexVectorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDelaunay.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testDimensionMacros.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testEdge.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.FullTensorMath.txt.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testFullTensorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK26Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIJK6Topology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testIrregGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testLine.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testPlane.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRMatrix.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testRefinedRegionsGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testShellGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTensorMultMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testTrigMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Geometry/tests/testVectorMath.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/Mesh.py
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/Python/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/BodyNL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CartesianGenerator.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CommTopology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/CornerNL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DecompTransfer.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Claim.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Decomp_Sync_Negotiate.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/DummyMD.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ElementLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Grid.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HMesh.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaEL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/HexaMD.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/IrregEL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/Mesh.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshAdaptor.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshClass.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshDecomp.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGenerator.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshGeometry.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/MeshTopology.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/NodeLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ParallelPipedHexaEL.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/ShadowInfo.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/StencilMD.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/SurfaceAdaptor.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/data/
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/data/trisurf.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCartesianGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testCommTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecompTransfer.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testDecomp_Sync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp-shadowDepth2.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-2D_Decomp.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.0of8.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp-shadowDepth2.7of8.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.0of8.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-3D_Decomp.7of8.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic-shadowDepth2.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-periodic.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-shadowDepth2.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced-shadowDepth2.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD-unbalanced.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMD.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testHexaMeshTopology.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf-withLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testIrregularMeshDecomp-triSurf.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh-large.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMesh.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.0of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.1of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.2of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.3of4.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-2D.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync-large.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshSync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testMeshTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedHexaEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testParallelPipedQuadEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testQuadEL.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testSingleCellMeshGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfGeometry.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Mesh/tests/testTriSurfTopology.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/bindings.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/Mesh/misc.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/Discretisation/Python/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowCosinePlane.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/BelowPlane.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Box.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ConvexHull.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Cylinder.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Everywhere.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Intersection.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PolygonShape.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/PythonShape.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Shape.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/ShapeClass.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Sphere.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Superellipsoid.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/Union.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/Viewport.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testBox3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testConvexHull2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testConvexHull3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testCylinder.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DDoubleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection2DSingleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DDoubleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testIntersection3DSingleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPolygonShape2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPolygonShape3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testPython3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D-invert.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSphere3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testSuperellipsoid3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion2DSingleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3D.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/expected/testUnion3DSingleNot.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/log/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/output/
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/output/window.mpeg
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testBox3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testConvexHull3D.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testCylinder.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DDoubleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection2DSingleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DDoubleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersection3DSingleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionDoubleNot.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testIntersectionSingleNot.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPolygonShape3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython2D.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testPython3D.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testShape.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere-invert.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D-invert.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSphere3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testSuperellipsoid3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion2DSingleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3D.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnion3DSingleNot.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Shape/tests/testUnionSingleNot.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/CellLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ElementCellLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/FileParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GaussParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/GlobalParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/IntegrationPoint.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/LineParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ManualParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/MeshParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/OperatorSwarmVariable.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleCommHandler.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/ParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PerCellParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/PlaneParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Random.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/RandomParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SingleCellLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SpaceFillerParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/StandardParticle.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmClass.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmDump.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmOutput.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/SwarmVariable_Register.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/Swarm_Register.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriGaussParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/TriSingleCellLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/UnionParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/WithinShapeParticleLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/Bouncer.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Bouncer/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/SingleAttractor.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/SingleAttractor/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/Spinner.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/Spinner/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/VaryingCornerAttractors.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/VaryingCornerAttractors/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testLineParticleLayout.0of1.output.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of1.spaceFillerParticleLayout.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.0of2.spaceFillerParticleLayout.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSpaceFillerParticleLayout.1of2.spaceFillerParticleLayout.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00000.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00001.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00002.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00003.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of1.swarmOutput.00004.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00000.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00001.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00002.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00003.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/expected/testSwarmOutput.0of2.swarmOutput.00004.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/log/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/output/
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testElementCellLayout0.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testGaussLayoutSingleCell.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testLineParticleLayout.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testManualParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testParticleCoords.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSingleCellLayout0.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSpaceFillerParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarm.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmDumpAndLoad.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmOutput.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvection.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionBouncer.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSingleAttractor.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinner.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionSpinnerSphere.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testSwarmParticleAdvectionVaryingCorners.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Swarm/tests/testWithinShapeParticleLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllElementsVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/AllNodesVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CellRemesher.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/CornerVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DiscretisationContext.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/DofLayout.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/EmbeddedSurface.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FieldVariable_Register.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/FrictionVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/InnerWallVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/LinearRegression.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/MeshCoarsener_Hexa.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Operator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/OperatorFieldVariable.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/RegularMeshUtils.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Remesher.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SemiRegDeform.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeAdvector.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/ShapeVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SobolGenerator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/SplitFrictionWallVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/StripRemesher.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Sync.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegratee.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/TimeIntegrator.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/Utils.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/WallVC.meta
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/src/types.h
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/allVC.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/compositeVC.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/cornerVC.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/data/wallVC.xml
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.RightmostBit.dat.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator0.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator4.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/expected/testSobolGenerator.0of1.testGenerator5.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/log/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/output/
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testAllNodesVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC-dictionary.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCompositeVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testCornerVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-remap.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout-saveAndLoad.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testDofLayout.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testEmbeddedSurface.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testFieldVariable_Register.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testMeshCoarsener_Hexa.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testOperatorFieldVariable.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testRegularMeshUtils.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSemiRegDeform.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSobolGenerator.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testSync.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegration.c
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationEuler.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK2.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testTimeIntegrationRK4.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.0of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of2.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.1of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.2of3.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/Utils/tests/testWallVC.c
   long/3D/SNAC/trunk/StGermain/Discretisation/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/src/
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Discretisation.h
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.c
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Init.h
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/src/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/makefile
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.expected
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.0of1.sh
   long/3D/SNAC/trunk/StGermain/Discretisation/tests/testLibDiscretisation.c
   long/3D/SNAC/trunk/StGermain/FD/
   long/3D/SNAC/trunk/StGermain/FD/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/Python/
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.c
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/bindings.h
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/init.c
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/makefile
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.c
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/MeshContext/misc.h
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/FD/Python/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/FD/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/Python/MeshContext.py
   long/3D/SNAC/trunk/StGermain/FD/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/FD/Python/makefile
   long/3D/SNAC/trunk/StGermain/FD/makefile
   long/3D/SNAC/trunk/StGermain/FD/src/
   long/3D/SNAC/trunk/StGermain/FD/src/FD.h
   long/3D/SNAC/trunk/StGermain/FD/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/FD/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/FD/src/Init.c
   long/3D/SNAC/trunk/StGermain/FD/src/Init.h
   long/3D/SNAC/trunk/StGermain/FD/src/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.c
   long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.h
   long/3D/SNAC/trunk/StGermain/FD/src/MeshContext.meta
   long/3D/SNAC/trunk/StGermain/FD/src/makefile
   long/3D/SNAC/trunk/StGermain/FD/src/shortcuts.h
   long/3D/SNAC/trunk/StGermain/FD/src/types.h
   long/3D/SNAC/trunk/StGermain/FD/tests/
   long/3D/SNAC/trunk/StGermain/FD/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/FD/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/FD/tests/makefile
   long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.expected
   long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.0of1.sh
   long/3D/SNAC/trunk/StGermain/FD/tests/testLibFD.c
   long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.expected
   long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.0of1.sh
   long/3D/SNAC/trunk/StGermain/FD/tests/testMeshContext0.c
   long/3D/SNAC/trunk/StGermain/Make.mm
   long/3D/SNAC/trunk/StGermain/Makefile.def
   long/3D/SNAC/trunk/StGermain/Makefile.system
   long/3D/SNAC/trunk/StGermain/Makefile.vmake
   long/3D/SNAC/trunk/StGermain/Regresstor/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkDiff/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/checkExecution/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/endRun/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/startRun/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/main.c
   long/3D/SNAC/trunk/StGermain/Regresstor/ClientPrograms/submitBuild/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorEmail.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/RegresstorMailConfig.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorMail/regresstorCheckAndSend.pl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Build.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Error.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/FailedUnitSubTest.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Machine.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Regresstor.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorCommon.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorConfig.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/RegresstorTable.pm
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Run.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/Summary.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/UnitTestCheck.tmpl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitBuild.pl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/clientSubmitCheck.pl
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildLog.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadBuildMakefile.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/RegresstorServices/downloadFailedUnitSubTestOutput.cgi
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.c
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/FailedSubTest.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.c
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/RegressionTest.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/Regresstor.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.c
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/UnitTest.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/forwardDecl.h
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/libRegresstor/src/types.h
   long/3D/SNAC/trunk/StGermain/Regresstor/makefile
   long/3D/SNAC/trunk/StGermain/Regresstor/tools/
   long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorDBSetup.pl
   long/3D/SNAC/trunk/StGermain/Regresstor/tools/regresstorMailSetup.pl
   long/3D/SNAC/trunk/StGermain/Services/
   long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/
   long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/BinaryServer.pm
   long/3D/SNAC/trunk/StGermain/Services/BinaryDownload/services.cgi
   long/3D/SNAC/trunk/StGermain/Services/Common/
   long/3D/SNAC/trunk/StGermain/Services/Common/Dictionary.pm
   long/3D/SNAC/trunk/StGermain/Services/Common/QueryShortcuts.pm
   long/3D/SNAC/trunk/StGermain/Services/Common/StGermainPrivate.pm
   long/3D/SNAC/trunk/StGermain/Services/Common/tests/
   long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-Dictionary.pl
   long/3D/SNAC/trunk/StGermain/Services/Common/tests/test-QueryShortcuts.pl
   long/3D/SNAC/trunk/StGermain/Services/StGermain.pm
   long/3D/SNAC/trunk/StGermain/Services/services.cgi
   long/3D/SNAC/trunk/StGermain/Services/tests/
   long/3D/SNAC/trunk/StGermain/Services/tests/downloads/
   long/3D/SNAC/trunk/StGermain/Services/tests/test-download.pl
   long/3D/SNAC/trunk/StGermain/Services/tests/test-getBinary.pl
   long/3D/SNAC/trunk/StGermain/Services/tests/test-giveFileTest.pl
   long/3D/SNAC/trunk/StGermain/Services/tests/test-ping.pl
   long/3D/SNAC/trunk/StGermain/Services/tests/test-submitBinary.pl
   long/3D/SNAC/trunk/StGermain/VMake/
   long/3D/SNAC/trunk/StGermain/VMake/COPYING
   long/3D/SNAC/trunk/StGermain/VMake/Commands/
   long/3D/SNAC/trunk/StGermain/VMake/Commands/all.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/check.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/clean.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/docs.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/echo.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/errorhelp.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/examples.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/find_fail.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/help.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/long_check.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/regresstor.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/scibenchmark_check.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/single_exe.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/svncleanup.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/touch.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/update.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Commands/version.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Component-meta-template.xml
   long/3D/SNAC/trunk/StGermain/VMake/Config/
   long/3D/SNAC/trunk/StGermain/VMake/Config/ImageFormats-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.error
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.log
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/make.warning
   long/3D/SNAC/trunk/StGermain/VMake/Config/OpenGl/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/PETSc/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/PICellerator/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/SLEPC-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/Snark-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/StGermain/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/StgFEM/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/Underworld/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11/
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/X11/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/Xanthus/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/atk-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/blaslapack-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/cairo-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/carbon-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/compiler-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/freetype-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/gLucifer-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/glib2-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/
   long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/glucifer/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/gtk2-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/hdf5-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/libavcodec-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/libfame-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/makefile-shortcuts.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/math-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/mpi/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/neon-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/pango-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/pdt-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/conftest.py
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-compile/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/python-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/python/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/Config/python/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/Config/python/makefile
   long/3D/SNAC/trunk/StGermain/VMake/Config/sdl-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/tau-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/tetgen-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/vtk-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Config/xml-config.sh
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/BuildOptions.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/DirectoryVariables.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/ProjectVariable.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/Subversion.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/UserVariables.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Initialise/VersionVariables.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Makefile.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/
   long/3D/SNAC/trunk/StGermain/VMake/Rules/Preprocess/
   long/3D/SNAC/trunk/StGermain/VMake/Rules/Targets/
   long/3D/SNAC/trunk/StGermain/VMake/Rules/apps_xml.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/bin.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/checks.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/compile.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/includes.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/input_xml.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/intermediate.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/lib.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/makedirs.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/meta.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/mod.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/packages.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/plugins.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/postmake.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/premake.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/processflags.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/pyb.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/pyc.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/source.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/subdirs.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/tau.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/tests.vmake
   long/3D/SNAC/trunk/StGermain/VMake/Rules/xmls.vmake
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/C-CompilerType/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/conftest.cxx
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/CXX-CompilerType/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Endian/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/conftest.F
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-CompilerType/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/conftest.F
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/makefile
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/Fortran-Symbol/symbol.c
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/bin-conftest/
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/conftest.c
   long/3D/SNAC/trunk/StGermain/VMake/SystemTests/LongSize/makefile
   long/3D/SNAC/trunk/StGermain/VMake/build-functions.sh
   long/3D/SNAC/trunk/StGermain/VMake/configure.sh
   long/3D/SNAC/trunk/StGermain/VMake/executableTester.sh
   long/3D/SNAC/trunk/StGermain/VMake/meta-template.c
   long/3D/SNAC/trunk/StGermain/VMake/profile.sh
   long/3D/SNAC/trunk/StGermain/VMake/softlinker.sh
   long/3D/SNAC/trunk/StGermain/Viewers/
   long/3D/SNAC/trunk/StGermain/Viewers/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/MLGen.c
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLGen/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.c
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/GLMeshLayout.h
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/MLView.c
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/MLView/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/main.cxx
   long/3D/SNAC/trunk/StGermain/Viewers/MeshLayoutViewer/src/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.cxx
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/GLMesh.h
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Make.mm
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/input.xml
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/main.cxx
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/makefile
   long/3D/SNAC/trunk/StGermain/Viewers/MeshViewer/src/types.h
   long/3D/SNAC/trunk/StGermain/Viewers/makefile
   long/3D/SNAC/trunk/StGermain/build-functions.sh
   long/3D/SNAC/trunk/StGermain/compatibility/
   long/3D/SNAC/trunk/StGermain/compatibility/Make.mm
   long/3D/SNAC/trunk/StGermain/compatibility/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libmpi/
   long/3D/SNAC/trunk/StGermain/compatibility/libmpi/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libmpi/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/
   long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/libpetsc/petsccompat.h
   long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/
   long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libpmpich/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/libpython/
   long/3D/SNAC/trunk/StGermain/compatibility/libpython/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/libpython/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/makefile
   long/3D/SNAC/trunk/StGermain/compatibility/mpipython/
   long/3D/SNAC/trunk/StGermain/compatibility/mpipython/Makefile.def
   long/3D/SNAC/trunk/StGermain/compatibility/mpipython/main.c
   long/3D/SNAC/trunk/StGermain/compatibility/mpipython/makefile
   long/3D/SNAC/trunk/StGermain/configure.sh
   long/3D/SNAC/trunk/StGermain/doc/
   long/3D/SNAC/trunk/StGermain/doc/C_full.doxyconf.in
   long/3D/SNAC/trunk/StGermain/doc/Makefile.def
   long/3D/SNAC/trunk/StGermain/doc/doxygen.css
   long/3D/SNAC/trunk/StGermain/doc/footer.html
   long/3D/SNAC/trunk/StGermain/doc/generateForWeb.sh
   long/3D/SNAC/trunk/StGermain/doc/header.html
   long/3D/SNAC/trunk/StGermain/doc/makefile
   long/3D/SNAC/trunk/StGermain/doc/web.doxyconf.in
   long/3D/SNAC/trunk/StGermain/libStGermain/
   long/3D/SNAC/trunk/StGermain/libStGermain/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/bindings.h
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/init.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/General/misc.h
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/bindings.h
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/init.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.c
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/MPI/misc.h
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/__init__.py
   long/3D/SNAC/trunk/StGermain/libStGermain/Python/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/dummy.c
   long/3D/SNAC/trunk/StGermain/libStGermain/dynamic/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/src/
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.c
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Finalise.h
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.c
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Init.h
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/src/StGermain.h
   long/3D/SNAC/trunk/StGermain/libStGermain/src/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/static/
   long/3D/SNAC/trunk/StGermain/libStGermain/static/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/static/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/static/dummy.c
   long/3D/SNAC/trunk/StGermain/libStGermain/static/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermain/tests/testLibStGermain.c
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/makefile
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermain/testsDynamic/testLibStGermainDynamic.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Finalise.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Init.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/StGermain.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/dummy.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/dynamic/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/FinaliseAll.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/InitAll.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/StGermainAll.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/src/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Finalise.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Init.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/StGermain.h
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/dummy.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/static/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermainAll/tests/testLibStGermainAll.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Make.mm
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/Makefile.def
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/makefile
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermain.c
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.expected
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.0of1.sh
   long/3D/SNAC/trunk/StGermain/libStGermainAll/testsDynamic/testLibStGermainAllDynamic.c
   long/3D/SNAC/trunk/StGermain/makefile
   long/3D/SNAC/trunk/StGermain/project-config.sh
   long/3D/SNAC/trunk/StGermain/pyre/
   long/3D/SNAC/trunk/StGermain/pyre/Application.py
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/Make.mm
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/Makefile.def
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/__init__.py
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/makefile
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Make.mm
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/Makefile.def
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.cc
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/bindings.h
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/init.cc
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/makefile
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.cc
   long/3D/SNAC/trunk/StGermain/pyre/Bindings/pyre/misc.h
   long/3D/SNAC/trunk/StGermain/pyre/Component.py
   long/3D/SNAC/trunk/StGermain/pyre/Controller.py
   long/3D/SNAC/trunk/StGermain/pyre/Debug.py
   long/3D/SNAC/trunk/StGermain/pyre/Dictionary.py
   long/3D/SNAC/trunk/StGermain/pyre/Layout.py
   long/3D/SNAC/trunk/StGermain/pyre/Make.mm
   long/3D/SNAC/trunk/StGermain/pyre/Makefile.def
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/Make.mm
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/Makefile.def
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/Mesh.py
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/RegularMeshLayout.py
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/__init__.py
   long/3D/SNAC/trunk/StGermain/pyre/Mesh/makefile
   long/3D/SNAC/trunk/StGermain/pyre/Solver.py
   long/3D/SNAC/trunk/StGermain/pyre/__init__.py
   long/3D/SNAC/trunk/StGermain/pyre/makefile
   long/3D/SNAC/trunk/StGermain/src/
   long/3D/SNAC/trunk/StGermain/src/main.c
   long/3D/SNAC/trunk/StGermain/src/makefile
Log:
Adding a working version of StGermain, rev. 3890.

Added: long/3D/SNAC/trunk/StGermain/.cvsignore
===================================================================
--- long/3D/SNAC/trunk/StGermain/.cvsignore	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/.cvsignore	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1 @@
+Makefile.system

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,50 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = libStGermainBaseAutomation
+
+RECURSE_DIRS = ${def_sub}
+
+all:
+	BLD_ACTION="all" $(MM) recurse
+
+PROJ_CLEAN = 
+clean::
+	BLD_ACTION="clean" $(MM) recurse
+
+tidy::
+	BLD_ACTION="tidy" $(MM) recurse
+
+check::
+	BLD_ACTION="check" $(MM) recurse
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,31 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_sub = src tests

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,40 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+subdirs = ${def_sub}
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Automation.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Automation.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Automation.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,68 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	External header file to this library.
+**
+** <b>Assumptions:</b>
+**	None.
+**
+** <b>Comments:</b>
+**	None.
+**
+** $Id: Automation.h 3614 2006-06-01 08:58:48Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_Automation_h__
+#define __Base_Automation_h__
+	
+	#include "types.h"
+	#include "shortcuts.h"
+	#include "offsets.h"
+	#include "Stg_Component.h"
+	#include "Stg_ComponentMeta.h"
+	#include "Stg_ComponentRegister.h"
+	#include "LiveComponentRegister.h"
+	#include "Stg_ComponentFactory.h"
+	#include "DocumentationComponentFactory.h"
+	#include "Variable.h"
+	#include "Variable_Register.h"
+	#include "VariableDumpStream.h"
+	#include "ConditionFunction.h"
+	#include "ConditionFunction_Register.h"
+	#include "VariableCondition.h"
+	#include "VariableCondition_Register.h"
+	#include "CompositeVC.h"
+	#include "SetVC.h"
+	#include "VariableAllVC.h"
+	#include "HierarchyTable.h"
+	#include "CallGraph.h"
+	#include "Init.h"
+	#include "Finalise.h"
+	
+#endif /* __Base_Automation_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,356 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Stg_Component.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "CallGraph.h"
+
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type Stg_CallGraph_Type = "Stg_CallGraph";
+
+static const Type _Stg_CallGraph_Stack_Type = "_Stg_CallGraph_Stack";
+static const Type _Stg_CallGraph_Entry_Type = "_Stg_CallGraph_Entry";
+static const Index _Stg_CallGraph_Table_Delta = 256; /* TODO: ascertain whether this is a good for an initial & delta size */
+
+/* Call graph singleton. The code in this file (this class) shouldn't use this global variable. It is a global variable ONLY
+    because adding it to the context and making the appropriate changes to EntryPoints and Components (and where ever else
+    push and pop may end up, is a big deal. */
+Stg_CallGraph* stgCallGraph = 0;
+
+
+Stg_CallGraph* Stg_CallGraph_New() {
+	return _Stg_CallGraph_New(
+		sizeof(Stg_CallGraph),
+		Stg_CallGraph_Type,
+		_Stg_CallGraph_Delete,
+		_Stg_CallGraph_Print,
+		_Stg_CallGraph_Copy );
+}
+
+void Stg_CallGraph_Init( void* callGraph ) {
+	Stg_CallGraph* self = (Stg_CallGraph*)callGraph;
+	
+	/* General info */
+	self->type = Stg_CallGraph_Type;
+	self->_sizeOfSelf = sizeof(Stg_CallGraph);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Stg_CallGraph_Delete;
+	self->_print = _Stg_CallGraph_Print;
+	self->_copy = _Stg_CallGraph_Copy;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* Stg_CallGraph info */
+	_Stg_CallGraph_Init( self );
+};
+
+Stg_CallGraph* _Stg_CallGraph_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*				_copy )
+{
+	Stg_CallGraph* self;
+	
+	/* Allocate memory */
+	Journal_Firewall( 
+		_sizeOfSelf >= sizeof(Stg_CallGraph), 
+		Journal_Register( Error_Type, Stg_CallGraph_Type ), 
+		"Attempting to construct an object that is smaller than this class" );
+	self = (Stg_CallGraph*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	
+	/* Stg_CallGraph info */
+	_Stg_CallGraph_Init( self );
+	
+	return self;
+}
+
+
+void _Stg_CallGraph_Init( Stg_CallGraph* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* Stg_CallGraph info */
+	self->_stack = 0;
+	self->_tableSize = _Stg_CallGraph_Table_Delta; 
+	self->_tableCount = 0;
+	self->table = Memory_Alloc_Array( _Stg_CallGraph_Entry, self->_tableSize, _Stg_CallGraph_Entry_Type );
+}
+
+
+static void _Stg_CallGraph_Delete_Stack( _Stg_CallGraph_Stack* stack ) {
+	if( stack ) {
+		_Stg_CallGraph_Delete_Stack( stack->pop );
+		Memory_Free( stack );
+	}
+}
+
+void _Stg_CallGraph_Delete( void* callGraph ) {
+	Stg_CallGraph* self = (Stg_CallGraph*)callGraph;
+	
+	/* Stg_CallGraph info */
+	_Stg_CallGraph_Delete_Stack( self->_stack );
+	if( self->table ) {
+		Memory_Free( self->table );
+	}
+	self->_tableCount = self->_tableSize = 0;
+	
+	/* Delete parent class */
+	_Stg_Class_Delete( self );
+}
+
+
+static void _Stg_CallGraph_Print_Stack( _Stg_CallGraph_Stack* stack, Stream* stream ) {
+	if( stack ) {
+		Journal_Printf( (void*) stream, "\t\tfunction pointer (ptr): %p\n", stack->functionPtr );
+		Journal_Printf( (void*) stream, "\t\tfunction name: \"%s\"\n", stack->name );
+		Journal_Printf( (void*) stream, "\t\tfunction started timestamp: %g\n", stack->time );
+		Journal_Printf( (void*) stream, "\t\tfunction memory stamp at start: %u\n", stack->memory );
+		Journal_Printf( (void*) stream, "\t\tfunction table entry: %u\n", stack->entry_I );
+		_Stg_CallGraph_Print_Stack( stack->pop, stream );
+	}
+}
+
+void _Stg_CallGraph_Print( void* callGraph, Stream* stream ) {
+	Stg_CallGraph*	self = (Stg_CallGraph*)callGraph;
+	Index		i;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Stg_CallGraph (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+	
+	/* Virtual info */
+	
+	/* Stg_CallGraph */
+	Journal_Printf( (void*) stream, "\t_stack (ptr): %p\n", self->_stack );
+	_Stg_CallGraph_Print_Stack( self->_stack, stream );
+	
+	Journal_Printf( (void*) stream, "\t_tableSize: %u\n", self->_tableSize );
+	Journal_Printf( (void*) stream, "\t_tableCount: %u\n", self->_tableCount );
+	Journal_Printf( (void*) stream, "\ttable (ptr): %p\n", self->table );
+	for( i = 0; i < self->_tableCount; i++ ) {
+		Journal_Printf( (void*) stream, 
+			"\t\tfunction (ptr): %p, parent (ptr): %p, name: \"%s\", parent name: \"%s\", time: %g, memory: %u, called: %u, returned: %u\n",
+			self->table[i].functionPtr, 
+			self->table[i].parentPtr, 
+			self->table[i].name,
+			self->table[i].parentName,
+			self->table[i].time, 
+			self->table[i].memory,
+			self->table[i].called,
+			self->table[i].returned );
+	}
+}
+
+
+static void _Stg_CallGraph_Copy_Table( _Stg_CallGraph_Entry* dst, _Stg_CallGraph_Entry* src, Index size, Index count ) {
+	memcpy( dst, src, sizeof(_Stg_CallGraph_Entry) * count );
+}
+
+static void _Stg_CallGraph_Copy_Stack_Deep( _Stg_CallGraph_Stack** dst, _Stg_CallGraph_Stack* src, PtrMap* map ) {
+	if( dst && !src ) {
+		*dst = src;
+	}
+	else if( dst && (*dst = PtrMap_Find( map, src )) == NULL ) {
+		*dst = Memory_Alloc( _Stg_CallGraph_Stack, "Stg_CallGraph->_stack" );
+		(*dst)->functionPtr = src->functionPtr;
+		(*dst)->name = src->name;
+		(*dst)->time = src->time;
+		(*dst)->memory = src->memory;
+		(*dst)->entry_I = src->entry_I;
+		(*dst)->pop = 0;
+		_Stg_CallGraph_Copy_Stack_Deep( &((*dst)->pop), src->pop, map );
+		PtrMap_Append( map, *dst, src );
+	}
+	
+}
+
+static void _Stg_CallGraph_Copy_Stack_ShallowIncr( _Stg_CallGraph_Stack* stack ) {
+	_Stg_CallGraph_Copy_Stack_ShallowIncr( stack->pop );
+	Memory_CountInc( stack );
+}
+
+static void _Stg_CallGraph_Copy_Stack_Shallow( _Stg_CallGraph_Stack** dst, _Stg_CallGraph_Stack* src ) {
+	*dst = src;
+	_Stg_CallGraph_Copy_Stack_ShallowIncr( *dst );
+}
+
+void* _Stg_CallGraph_Copy( void* callGraph, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_CallGraph*	self = (Stg_CallGraph*)callGraph;
+	Stg_CallGraph*	newCallGraph;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap= False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newCallGraph = _Stg_Class_Copy( callGraph, dest, deep, nameExt, ptrMap );
+	
+	/* Virtual methods */
+	newCallGraph->_tableSize = self->_tableSize;
+	newCallGraph->_tableCount = self->_tableCount;
+
+	if( deep ) {
+		if( self->table && (newCallGraph->table = PtrMap_Find( map, self->table )) == NULL ) {
+			newCallGraph->table = Memory_Alloc_Array( _Stg_CallGraph_Entry, newCallGraph->_tableSize, 
+				"Stg_CallGraph->table" );
+			_Stg_CallGraph_Copy_Table( newCallGraph->table, self->table, newCallGraph->_tableSize, 
+				newCallGraph->_tableCount );
+			PtrMap_Append( map, newCallGraph->table, self->table );
+		}
+		
+		_Stg_CallGraph_Copy_Stack_Deep( &newCallGraph->_stack, self->_stack, map );
+	}
+	else {
+		newCallGraph->table = self->table;
+		Memory_CountInc( newCallGraph->table );
+		_Stg_CallGraph_Copy_Stack_Shallow( &newCallGraph->_stack, self->_stack );
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+
+	return newCallGraph;
+}
+
+
+
+void Stg_CallGraph_Push( void* callGraph, void* functionPtr, Type name ) {
+	Stg_CallGraph*		self = (Stg_CallGraph*)callGraph;
+	_Stg_CallGraph_Stack*	newStack;
+	Bool			found;
+	void*			parentPtr;
+	Type			parentName;
+	
+	/* Push onto the stack */
+	parentPtr = self->_stack ? self->_stack->functionPtr : 0;
+	parentName = self->_stack ? self->_stack->name : 0;
+	newStack = Memory_Alloc( _Stg_CallGraph_Stack, _Stg_CallGraph_Stack_Type );
+	newStack->functionPtr = functionPtr;
+	newStack->name = name;
+	newStack->time = 0.0f; /* TODO: Actual time stamp */
+	newStack->memory = 0; /* TODO: Actual memory stamp */
+	newStack->pop = self->_stack;
+	self->_stack = newStack;
+	
+	/* Search for the function in the table */
+	found = False;
+	for( newStack->entry_I = 0; newStack->entry_I < self->_tableCount; newStack->entry_I++ ) {
+		/* Each function/parent-pointer - function/parent name, is treated as a distinct call graph entry. This way, if a
+		    function is called by more than one distinct function, we have that information (the user can combine this
+		    info if they see fit. And in the case of entry points, the same function pointer is used for all entry points,
+		    as the name is the distinquisher */
+		if( 
+			self->table[newStack->entry_I].functionPtr == functionPtr &&
+			self->table[newStack->entry_I].parentPtr == parentPtr &&
+			self->table[newStack->entry_I].name == name && 
+			self->table[newStack->entry_I].parentName == parentName ) 
+		{
+			found = True;
+			break;
+		}
+	}
+	
+	if( found ) {
+		self->table[newStack->entry_I].called += 1;
+	}
+	/* else, add to the table */
+	else {
+		/* We may need to allocate some more memory */
+		if( self->_tableCount >= self->_tableSize ) {
+			_Stg_CallGraph_Entry* newTable;
+			SizeT newSize;
+			
+			Journal_Firewall( 
+				self->_tableCount == self->_tableSize, 
+				Journal_Register( Error_Type, Stg_CallGraph_Type ), 
+				"Somehow the table entry counter is greater than the memory allocation" );
+
+			
+			newSize = self->_tableSize + _Stg_CallGraph_Table_Delta;
+			newTable = Memory_Alloc_Array( _Stg_CallGraph_Entry, newSize, _Stg_CallGrap_Entry_Type );
+			/* safe to do, we want to copy ptr values */
+			memcpy( newTable, self->table, self->_tableSize * sizeof(_Stg_CallGraph_Entry) ); 
+			Memory_Free( self->table );
+			self->table = newTable;
+			self->_tableSize = newSize;
+		}
+		
+		newStack->entry_I = self->_tableCount;
+		self->_tableCount += 1;
+		
+		self->table[newStack->entry_I].functionPtr = functionPtr;
+		self->table[newStack->entry_I].name = name;
+		self->table[newStack->entry_I].parentPtr = parentPtr;
+		self->table[newStack->entry_I].parentName = parentName;
+		self->table[newStack->entry_I].time = 0.0f;
+		self->table[newStack->entry_I].memory = 0;
+		self->table[newStack->entry_I].called = 1;
+		self->table[newStack->entry_I].returned = 0;
+	}
+}
+
+void Stg_CallGraph_Pop( void* callGraph ) {
+	Stg_CallGraph*		self = (Stg_CallGraph*)callGraph;
+	_Stg_CallGraph_Stack*	oldStack;
+	
+	Journal_Firewall( 
+		self->_stack != 0, 
+		Journal_Register( Error_Type, Stg_CallGraph_Type ), 
+		"Attempting to pop and empty stack" );
+	
+	/* Record the accumulative delta time & memory */
+	self->table[self->_stack->entry_I].time += 0 /* TODO: Actual time stamp */ - self->_stack->time;
+	self->table[self->_stack->entry_I].memory += 0 /* TODO: Actual memory stamp */ - self->_stack->memory;
+	self->table[self->_stack->entry_I].returned += 1;
+	
+	/* Pop the stack */
+	oldStack = self->_stack;
+	self->_stack = oldStack->pop;
+	Memory_Free( oldStack );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CallGraph.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,129 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id$
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Stg_CallGraph_h__
+#define __Base_Automation_Stg_CallGraph_h__
+	
+	/* Templates of virtual functions */
+	typedef struct {
+		void*			functionPtr;
+		Type			name;			/* assume its a const char* (i.e. we just need to copy ptr */
+		void*			parentPtr;
+		Type			parentName;		/* assume its a const char* (i.e. we just need to copy ptr */
+		double			time;
+		SizeT			memory;
+		Index			called;
+		Index			returned;
+	} _Stg_CallGraph_Entry;
+	
+	typedef struct __Stg_CallGraph_Stack _Stg_CallGraph_Stack;
+	struct __Stg_CallGraph_Stack {
+		void*			functionPtr;
+		Type			name;			/* assume its a const char* (i.e. we just need to copy ptr */
+		double			time;
+		SizeT			memory;
+		Index			entry_I;
+		_Stg_CallGraph_Stack*	pop;
+	};
+	
+	/* Textual name of this class */
+	extern const Type Stg_CallGraph_Type;
+	
+	/* Stg_Component information */
+	#define __Stg_CallGraph \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_CallGraph info */ \
+		_Stg_CallGraph_Stack*	_stack; \
+		_Stg_CallGraph_Entry*	table; \
+		Index			_tableSize; \
+		Index			_tableCount;
+	struct Stg_CallGraph { __Stg_CallGraph };
+	
+	
+	/** StGermain call graph singleton */
+	extern Stg_CallGraph* stgCallGraph;
+	
+	/** Create a new CallGraph */
+	Stg_CallGraph* Stg_CallGraph_New();
+	
+	/** Initialise an existing CallGraph */
+	void Stg_CallGraph_Init( void* callGraph );
+	
+	/* Creation implementation */
+	Stg_CallGraph* _Stg_CallGraph_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*				_copy );
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	/* Initialisation implementation */
+	void _Stg_CallGraph_Init( Stg_CallGraph* self );
+	
+	/* Delete implementation */
+	void _Stg_CallGraph_Delete( void* callGraph );
+	
+	/* Print implementation */
+	void _Stg_CallGraph_Print( void* callGraph, Stream* stream );
+	
+	/* Copy implementation */
+	void* _Stg_CallGraph_Copy( void* callGraph, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	/* Copy the component */
+	#define Stg_CallGraph_Copy( self ) \
+		(Stg_CallGraph*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Stg_CallGraph_DeepCopy(self) \
+		(Stg_CallGraph*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	/** Push a new function call onto the stack, and lodge trace */
+	void Stg_CallGraph_Push( void* callGraph, void* functionPtr, Type name );
+	
+	/** Pop the function on the stack, and finalise trace */
+	void Stg_CallGraph_Pop( void* callGraph );
+	
+#endif /* __Base_Automation_Stg_CallGraph_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,168 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ComponentRepository.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Base.h"
+#include "Context/Context.h"
+#include "types.h"
+#include "units.h"
+#include "AbstractFactory.h"
+#include "Stg_ComponentFactory.h"
+#include "Stg_ComponentRepository.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type Stg_ComponentRepository_Type = "Stg_ComponentRepository";
+
+
+Stg_ComponentRepository* Stg_ComponentRepository_New( Dictionary* dictionary ) {
+	return _Stg_ComponentRepository_New( sizeof(Stg_ComponentRepository), Stg_ComponentRepository_Type, _Stg_ComponentRepository_Delete,
+		_Stg_ComponentRepository_Print, dictionary );
+}
+
+void Stg_ComponentRepository_Init( Stg_ComponentRepository* self, Dictionary* dictionary )
+{
+	/* General info */
+	self->type = Stg_ComponentRepository_Type;
+	self->_sizeOfSelf = sizeof(Stg_ComponentRepository);
+	self->_deleteSelf = False;
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	self->_delete = _Stg_ComponentRepository_Delete;
+	self->_print = _Stg_ComponentRepository_Print;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* Stg_ComponentRepository */
+	_Stg_ComponentRepository_Init( self );
+}
+
+Stg_ComponentRepository* _Stg_ComponentRepository_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Dictionary*			dictionary )
+{
+	Stg_ComponentRepository* self;
+	
+	/* Allocate memory */
+	self = (Stg_ComponentRepository*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print );
+	
+	/* General info */
+	self->dictionary = dictionary;
+	
+	/* Virtual info */
+	
+	/* Stg_ComponentRepository info */
+	_Stg_ComponentRepository_Init( self );
+	
+	return self;
+}
+
+void _Stg_ComponentRepository_Init( Stg_ComponentRepository* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* Stg_ComponentRepository info */
+	self->factoriesSize = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_GetDefault( self->dictionary, 
+		"componentFactoriesSize", Dictionary_Entry_Value_FromUnsignedInt( 256 ) ) );
+	self->factoriesDelta = Dictionary_Entry_Value_AsUnsignedInt( Dictionary_GetDefault( self->dictionary, 
+		"componentFactoriesDelta", Dictionary_Entry_Value_FromUnsignedInt( 256 ) ) );
+	self->factories = Memory_Alloc_Array( Stg_ComponentFactoryPtr, self->factoriesSize, "Stg_ComponentRepository->factories" );
+	self->factories = 0;
+}
+
+void _Stg_ComponentRepository_Delete( void* componentRepository ) {
+	Stg_ComponentRepository* self = (Stg_ComponentRepository*)componentRepository;
+	
+	if( self->factories ) {
+		Memory_Free( self->factories );
+	}
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+void _Stg_ComponentRepository_Print( void* componentRepository ) {
+	Stg_ComponentRepository* self = (Stg_ComponentRepository*)componentRepository;
+	Factory_Index factoryIndex;
+	
+	/* Set the Journal for printing informations */
+	Stream* componentRepositoryStream = Journal_Register( InfoStream_Type,	"Stg_ComponentRepositoryStream");
+	
+	/* General info */
+	Journal_Printf( componentRepositoryStream, "Stg_ComponentRepository (%p):\n", self );
+	
+	/* Print parent */
+	_Stg_Class_Print( self );
+	
+	/* Virtual info */
+	
+	/* Stg_ComponentRepository info */
+	Journal_Printf( componentRepositoryStream, "\tfactoriesSize: %lu\n", self->factoriesSize );
+	Journal_Printf( componentRepositoryStream, "\tfactoriesDelta: %lu\n", self->factoriesDelta );
+	Journal_Printf( componentRepositoryStream, "\tfactoryCount: %lu\n", self->factoryCount );
+	
+	Journal_Printf( componentRepositoryStream, "\tfactories: %p\n", self->factories );
+	Journal_Printf( componentRepositoryStream, "\tfactories[0-%lu]: ", self->factoryCount );
+	for( factoryIndex = 0; factoryIndex < self->factoryCount; factoryIndex++ ) {
+		Journal_Printf( componentRepositoryStream, "%p ", self->factories[factoryIndex] );
+	}
+	Journal_Printf( componentRepositoryStream, "\n" );
+}
+
+void Stg_ComponentRepository_Register( void* componentRepository, Stg_ComponentFactory* factory ) {
+	Stg_ComponentRepository* self = (Stg_ComponentRepository*)componentRepository;
+	
+	if( self->factoryCount == self->factoriesSize ) {
+		self->factoriesSize += self->factoriesDelta;
+		self->factories = Memory_Realloc_Array( self->factories, Stg_ComponentFactoryPtr, self->factoriesSize );
+		assert( self->factories );
+	}
+	self->factories[self->factoryCount] = factory;
+}
+	
+void* Stg_ComponentRepository_Build( void* componentRepository, Category category, ClassType class ) {
+	Stg_ComponentRepository* self = (Stg_ComponentRepository*)componentRepository;
+	
+	Factory_Index index;
+	Stg_ComponentFactory* factory;
+	
+	factory = Stg_ComponentFactory_New( category, class, 0 );
+	
+	for( index = 0; index < self->factoryCount; index++ ) {
+		if( Stg_ComponentFactory_IsEqual( self->factories[index], factory ) ) {
+			Memory_Free( factory );
+			return self->factories[index];
+		}
+	}
+	return 0;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ComponentRepository.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,93 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Creator of arbitary components.
+**
+** Assumptions:
+**
+** Comments:
+**	Does not assumes ownership of the factories registered (i.e. it will not free the memory associated to them ).
+**	Do we eventually want to keep a registry of instantiated components?
+**
+** $Id: ComponentRepository.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Stg_Component_Stg_ComponentRepository_h__
+#define __Stg_Component_Stg_ComponentRepository_h__
+	
+	/* Textual name of this class */
+	extern const Type Stg_ComponentRepository_Type;
+	
+	/* Stg_ComponentRepository information */
+	#define __Stg_ComponentRepository \
+		/* General info */ \
+		__Stg_Class \
+		Dictionary*		dictionary; \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_ComponentRepository info */ \
+		Stg_ComponentFactoryPtr*	factories; \
+		Factory_Index		factoriesSize; \
+		Factory_Index		factoriesDelta; \
+		Factory_Index		factoryCount; 
+	struct _Stg_ComponentRepository { __Stg_ComponentRepository };
+	
+	
+	/* Create a new Stg_ComponentRepository and initialise */
+	Stg_ComponentRepository* Stg_ComponentRepository_New( Dictionary* dictionary );
+	
+	/* Initialise a Stg_ComponentRepository construct */
+	void Stg_ComponentRepository_Init( Stg_ComponentRepository* self, Dictionary* dictionary );
+	
+	/* Creation implementation / Virtual constructor */
+	Stg_ComponentRepository* _Stg_ComponentRepository_New( 
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Dictionary*			dictionary );
+	
+	/* Initialise implementation */
+	void _Stg_ComponentRepository_Init( Stg_ComponentRepository* self );
+	
+	/* Stg_Class_Delete a Stg_ComponentRepository implementation */
+	void _Stg_ComponentRepository_Delete( void* componentRepository );
+	
+	/* Print a Stg_ComponentRepository implementation */
+	void _Stg_ComponentRepository_Print( void* componentRepository );
+	
+	/* Register a new type of component. Stg_ComponentRepository does not assume ownership of the factory. */
+	void Stg_ComponentRepository_Register( void* componentRepository, Stg_ComponentFactory* factory );
+	
+	/* Create a new component */
+	void* Stg_ComponentRepository_Build( void* componentRepository, Category category, ClassType class );
+	
+#endif /* __Stg_Component_Stg_ComponentRepository_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,708 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: CompositeVC.c 3881 2006-10-26 03:14:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "LiveComponentRegister.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+#include "VariableCondition.h"
+#include "VariableCondition_Register.h"
+#include "CompositeVC.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type CompositeVC_Type = "CompositeVC";
+const Name defaultCompositeVCName = "defaultCompositeVCName";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* CompositeVC_Factory(
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return (VariableCondition*)CompositeVC_New( defaultCompositeVCName, variable_Register, conFunc_Register, dictionary, data );
+}
+
+
+CompositeVC* CompositeVC_New(
+		Name						name,
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return _CompositeVC_New(
+		sizeof(CompositeVC), 
+		CompositeVC_Type, 
+		_CompositeVC_Delete, 
+		_CompositeVC_Print,
+		_CompositeVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)CompositeVC_DefaultNew,
+		_CompositeVC_Construct,
+		_CompositeVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		True,
+		NULL,
+		_CompositeVC_PrintConcise,
+		_CompositeVC_ReadDictionary,
+		_CompositeVC_GetSet, 
+		_CompositeVC_GetVariableCount, 
+		_CompositeVC_GetVariableIndex, 
+		_CompositeVC_GetValueIndex, 
+		_CompositeVC_GetValueCount, 
+		_CompositeVC_GetValue, 
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		data );
+}
+
+CompositeVC* CompositeVC_DefaultNew( Name name )
+{
+	return (CompositeVC*)_CompositeVC_New(
+		sizeof(CompositeVC), 
+		CompositeVC_Type, 
+		_CompositeVC_Delete, 
+		_CompositeVC_Print,
+		_CompositeVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)CompositeVC_DefaultNew,
+		_CompositeVC_Construct,
+		_CompositeVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		NULL,
+		_CompositeVC_PrintConcise,
+		_CompositeVC_ReadDictionary,
+		_CompositeVC_GetSet, 
+		_CompositeVC_GetVariableCount, 
+		_CompositeVC_GetVariableIndex, 
+		_CompositeVC_GetValueIndex, 
+		_CompositeVC_GetValueCount, 
+		_CompositeVC_GetValue, 
+		NULL/*variable_Register*/, 
+		NULL/*conFunc_Register*/,
+		NULL,
+		NULL );
+}
+
+void CompositeVC_Init(
+		CompositeVC*					self, 
+		Name						name,
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	/* General info */
+	self->type = CompositeVC_Type;
+	self->_sizeOfSelf = sizeof(CompositeVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _CompositeVC_Delete;
+	self->_print = _CompositeVC_Print;
+	self->_copy = _CompositeVC_Copy;
+	self->_build = _CompositeVC_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_buildSelf = NULL;
+	self->_printConcise = _CompositeVC_PrintConcise;
+	self->_readDictionary = _CompositeVC_ReadDictionary;
+	self->_getSet = _CompositeVC_GetSet;
+	self->_getVariableCount = _CompositeVC_GetVariableCount;
+	self->_getVariableIndex = _CompositeVC_GetVariableIndex;
+	self->_getValueIndex = _CompositeVC_GetValueIndex;
+	self->_getValueCount = _CompositeVC_GetValueCount;
+	self->_getValue = _CompositeVC_GetValue;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+	/* Stg_Class info */
+	_CompositeVC_Init( self, data );
+}
+
+
+CompositeVC* _CompositeVC_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*		_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*			_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		VariableCondition_BuildSelfFunc*		_buildSelf, 
+		VariableCondition_PrintConciseFunc*		_printConcise,
+		VariableCondition_ReadDictionaryFunc*		_readDictionary,
+		VariableCondition_GetSetFunc*			_getSet,
+		VariableCondition_GetVariableCountFunc		_getVariableCount,
+		VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+		VariableCondition_GetValueIndexFunc*		_getValueIndex,
+		VariableCondition_GetValueCountFunc*		_getValueCount,
+		VariableCondition_GetValueFunc*			_getValue,
+		Variable_Register*				variable_Register,
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data)
+{
+	CompositeVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(CompositeVC));
+	self = (CompositeVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print, 
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,
+		_readDictionary,
+		_getSet, 
+		_getVariableCount,
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue, 
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_CompositeVC_Init( self, data );
+	}
+	
+	return self;
+}
+
+
+void _CompositeVC_Init(
+		void*						compositeVC, 
+		void*						data )
+{
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	
+	self->isConstructed = True;
+	self->itemCount = 0;
+	self->_size = 8;
+	self->_delta = 8;
+	self->itemTbl = Memory_Alloc_Array( VariableCondition*, self->_size, "CompositeCV->itemTbl" );
+	memset(self->itemTbl, 0 , sizeof(VariableCondition*)*self->_size);
+	self->iOwnTbl = Memory_Alloc_Array( Bool, self->_size, "CompositeCV->iOwnTbl" );
+	memset(self->iOwnTbl, 0, sizeof(Bool)*self->_size);
+	self->data = data;
+	self->attachedSets = 0;
+	self->hasReadDictionary = False;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _CompositeVC_ReadDictionary( void* compositeVC, void* dictionary ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+
+	/* View the dictionary as a list of variable conditions */
+	if( dictionary && !self->hasReadDictionary ) {
+		Dictionary_Entry_Value*	vcList;
+		
+		vcList = Dictionary_Get( dictionary, "vcList" );
+		if( vcList ) {
+			Index	count;
+			Index	entry_I;
+			
+			count = Dictionary_Entry_Value_GetCount(vcList);
+			for (entry_I = 0; entry_I < count; entry_I++)
+			{
+				Dictionary_Entry_Value*	vcEntry;
+				Type			type;
+				Dictionary*		dictionary;
+				VariableCondition*	vc;
+				
+				vcEntry = Dictionary_Entry_Value_GetElement(vcList, entry_I);
+				type = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(vcEntry, "type"));
+				dictionary = Dictionary_Entry_Value_AsDictionary(vcEntry);
+				vc = VariableCondition_Register_CreateNew(variableCondition_Register, self->variable_Register, 
+					self->conFunc_Register, type, dictionary, self->data );
+				vc->_readDictionary( vc, dictionary );
+				CompositeVC_Add(self, vc, True);
+			}
+			
+		}
+		self->hasReadDictionary = True;
+	}
+}
+
+void _CompositeVC_Construct( void* compositeVC, Stg_ComponentFactory* cf, void* data ) {
+	CompositeVC* self                      = (CompositeVC*)compositeVC;
+	void*        variableRegister          = NULL;
+	void*        conditionFunctionRegister = NULL;
+	void*        initData                      = NULL;
+	Dictionary*  vcDict                    = NULL;
+	Name         vcName;
+	
+	self->dictionary = cf->rootDict;
+	
+	variableRegister = (void*)Stg_ObjectList_Get( cf->registerRegister, "Variable_Register" );
+	assert( variableRegister );
+	conditionFunctionRegister = (void*)Stg_ObjectList_Get( cf->registerRegister, "ConditionFunction_Register" );
+	assert( conditionFunctionRegister );
+	
+	vcName = Stg_ComponentFactory_GetString( cf, self->name, "vcName", self->name );
+	if ( cf->rootDict )
+		vcDict = Dictionary_GetDictionary( cf->rootDict, vcName );
+//	Journal_Firewall(
+//			vcDict != NULL,
+//			Journal_Register( Error_Type, self->type ),
+//			"For %s '%s' - Cannont find variable condition dictionary '%s'\n", self->type, self->name, vcName );
+	
+	initData = Stg_ComponentFactory_ConstructByKey( cf, self->name, "Data", Stg_Component, False, data );
+	
+	_VariableCondition_Init( self, variableRegister, conditionFunctionRegister, vcDict );
+	_CompositeVC_Init( self, initData );
+}
+
+void _CompositeVC_Delete(void* compositeVC)
+{
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	
+	if (self->itemTbl)
+	{
+		VariableCondition_Index	entry_I;
+		
+		for (entry_I = 0; entry_I < self->itemCount; entry_I++)
+		{
+			if (self->iOwnTbl[entry_I] && self->itemTbl[entry_I])
+				Memory_Free(self->itemTbl[entry_I]);
+		}
+		
+		Memory_Free(self->itemTbl);
+	}
+	
+	if( self->attachedSets ) {
+		Memory_Free( self->attachedSets );
+	}
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _CompositeVC_Print(void* compositeVC, Stream* stream)
+{
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Index		item_I;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "CompositeVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\titemCount: %u\n", self->itemCount );
+	Journal_Printf( info, "\titemTbl (ptr): %p\n", self->itemTbl);
+	if (self->itemTbl)
+	{
+		for (item_I = 0; item_I < self->itemCount; item_I++)
+			Journal_Printf( info, "\t\titemTbl[%u] (ptr): %p\n", item_I, self->itemTbl[item_I]);
+	}
+	Journal_Printf( info, "\tiOwnTbl (ptr): %p\n", self->iOwnTbl);
+	if (self->iOwnTbl)
+	{
+		for (item_I = 0; item_I < self->itemCount; item_I++)
+			Journal_Printf( info, "\t\tiOwnTbl[%u]: %s\n", item_I, self->iOwnTbl[item_I] ? "True" : "False");
+	}
+	Journal_Printf( info, "\t_size: %lu\n", self->_size);
+	Journal_Printf( info, "\t_delta: %lu\n", self->_delta);
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+}
+
+
+void* _CompositeVC_Copy( void* compositeVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	CompositeVC*	newCompositeVC;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newCompositeVC = (CompositeVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newCompositeVC->itemCount = self->itemCount;
+	newCompositeVC->_size = self->_size;
+	newCompositeVC->_delta = self->_delta;
+	newCompositeVC->hasReadDictionary = self->hasReadDictionary;
+	newCompositeVC->data = self->data;
+	
+	if( deep ) {
+		if( (newCompositeVC->itemTbl = PtrMap_Find( map, self->itemTbl )) == NULL && self->itemTbl ) {
+			Index	item_I;
+			
+			newCompositeVC->itemTbl = Memory_Alloc_Array( VariableCondition*, newCompositeVC->_size, "CompositeCV->itemTbl" );
+			memset( newCompositeVC->itemTbl, 0, sizeof(VariableCondition*) * newCompositeVC->_size );
+			for( item_I = 0; item_I < self->itemCount; item_I++ ) {
+				newCompositeVC->itemTbl[item_I] = (VariableCondition*)Stg_Class_Copy( self->itemTbl[item_I], NULL, deep, nameExt, map );
+			}
+			PtrMap_Append( map, newCompositeVC->itemTbl, self->itemTbl );
+		}
+		
+		if( (newCompositeVC->iOwnTbl = PtrMap_Find( map, self->iOwnTbl )) == NULL && self->iOwnTbl ) {
+			newCompositeVC->iOwnTbl = Memory_Alloc_Array( Bool, newCompositeVC->_size, "CompositeCV->iOwnTbl" );
+			memcpy( newCompositeVC->iOwnTbl, self->iOwnTbl, sizeof(Bool) * newCompositeVC->_size );
+			PtrMap_Append( map, newCompositeVC->iOwnTbl, self->iOwnTbl );
+		}
+		
+		if( (newCompositeVC->attachedSets = PtrMap_Find( map, self->attachedSets )) == NULL && self->attachedSets ) {
+			Index	item_I;
+			
+			self->attachedSets = Memory_Alloc_Array( IndexSet*, newCompositeVC->itemCount, "CompositeCV->attachedSets" );
+			for( item_I = 0; item_I < self->itemCount; item_I++ ) {
+				newCompositeVC->attachedSets[item_I] = (IndexSet*)Stg_Class_Copy( self->attachedSets[item_I], NULL, deep, nameExt, map );
+			}
+			PtrMap_Append( map, newCompositeVC->attachedSets, self->attachedSets );
+		}
+	}
+	else {
+		newCompositeVC->itemTbl = self->itemTbl;
+		newCompositeVC->iOwnTbl = self->iOwnTbl;
+		newCompositeVC->attachedSets = self->attachedSets;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newCompositeVC;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _CompositeVC_Build( void* compositeVC, void* data ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Index		index;
+	
+	/* Read the dictionary... we have to do this early to get self->itemCount filled in. Hence we keep a flag to ensure we
+		dont read twice */
+	self->_readDictionary( self, self->dictionary );
+	
+	/* Build a temporary array to store the sets of attached VCs for the build process and clear it afterward */
+	if( self->itemCount ) {
+		Index			item_I;
+		
+		self->attachedSets = Memory_Alloc_Array( IndexSet*, self->itemCount, "CompositeCV->attachedSets" );
+		memset( self->attachedSets, 0, sizeof(IndexSet*) * self->itemCount );
+		
+		/* This guy is here so that a VC that was created by the composite VC can do any
+		   build stuff it needs, without calling _VariableCondition_Build for itself. */
+		for( item_I = 0; item_I < self->itemCount; item_I++ ) {
+			VariableCondition_BuildSelf( self->itemTbl[item_I], data );
+		}
+		
+		_VariableCondition_Build( self, data );
+		for( index = 0; index < self->itemCount; index++ ) {
+			Stg_Class_Delete( self->attachedSets[index] );
+		}
+		Memory_Free( self->attachedSets );
+		self->attachedSets = 0;
+	}
+}
+
+
+IndexSet* _CompositeVC_GetSet( void* compositeVC ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	IndexSet*	set = NULL;
+	Index		i;
+	
+	/* Use the first attachment to obtain the size, etc. Be effecient by duplicating if for the my own set */
+	if( self->itemCount ) {
+		self->attachedSets[0] = self->itemTbl[0]->_getSet( self->itemTbl[0] );
+		set = IndexSet_Duplicate( self->attachedSets[0] );
+	}
+	
+	/* For the remainder of the attachments, OR in their sets */
+	for( i = 1; i < self->itemCount; i++ ) {
+		self->attachedSets[i] = self->itemTbl[i]->_getSet( self->itemTbl[i] );
+		IndexSet_Merge_OR( set, self->attachedSets[i] );
+	}
+	
+	return set;
+}
+
+	
+Variable_Index _CompositeVC_GetVariableCount( void* compositeVC, Index globalIndex ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Variable_Index*	varIndices;
+	Variable_Index	varIndexCount = 0;
+	Index		i;
+	
+	varIndices = Memory_Alloc_Array( Variable_Index, self->variable_Register->count, "varIndices" );
+		
+	for( i = 0; i < self->itemCount; i++ ) {
+		if( IndexSet_IsMember( self->attachedSets[i], globalIndex ) ) {
+			Index	varCount = self->itemTbl[i]->_getVariableCount( self->itemTbl[i], globalIndex );
+			Index	j;
+		
+			for(j = 0; j < varCount; j++ ) {
+				Index	newVarIndex = self->itemTbl[i]->_getVariableIndex(self->itemTbl[i], globalIndex, j);
+				Index	k;
+			
+				for (k = 0; k < varIndexCount; k++)
+					if (varIndices[k] == newVarIndex)
+						break;
+				if (k < varIndexCount)
+					continue;
+				
+				varIndices[varIndexCount++] = newVarIndex;
+			}
+		}
+	}
+	
+	if (varIndices) Memory_Free(varIndices);
+	
+	return varIndexCount;
+}
+
+	
+Variable_Index _CompositeVC_GetVariableIndex(
+		void*				compositeVC, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex)
+{
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Variable_Index*	varIndices;
+	Variable_Index	varIndexCount = 0;
+	Index		i;
+	
+	varIndices = Memory_Alloc_Array( Variable_Index, self->variable_Register->count, "varIndices" );
+		
+	for( i = 0; i < self->itemCount; i++ ) {
+		if( IndexSet_IsMember( self->attachedSets[i], globalIndex ) ) {
+			Index	varCount = self->itemTbl[i]->_getVariableCount(self->itemTbl[i], globalIndex);
+			Index	j;
+		
+			for (j = 0; j < varCount; j++)
+			{
+				Index	newVarIndex = self->itemTbl[i]->_getVariableIndex(self->itemTbl[i], globalIndex, j);
+				Index	k;
+			
+				for (k = 0; k < varIndexCount; k++)
+					if (varIndices[k] == newVarIndex)
+						break;
+				if (k < varIndexCount)
+					continue;
+			
+				if (varIndexCount == varIndex)
+				{
+					if (varIndices) Memory_Free(varIndices);
+					return newVarIndex;
+				}
+			
+				varIndices[varIndexCount++] = newVarIndex;
+			}
+		}
+	}
+	
+	if (varIndices) Memory_Free(varIndices);
+	
+	return (Variable_Index)-1;
+}
+
+
+VariableCondition_ValueIndex _CompositeVC_GetValueIndex(
+				void*				compositeVC, 
+				Index				globalIndex, 
+				VariableCondition_VariableIndex	varIndex)
+{
+	CompositeVC*			self = (CompositeVC*)compositeVC;
+	VariableCondition_ValueIndex	valIndex = (VariableCondition_ValueIndex)-1;
+	CompositeVC_ItemIndex		valItem = 0;
+	Variable_Index			varRegIndex = self->_getVariableIndex(self, globalIndex, varIndex);
+	Index				i;
+	
+	for( i = self->itemCount; i > 0; i-- ) {
+		if( IndexSet_IsMember( self->attachedSets[i-1], globalIndex ) ) {
+			Index	j;
+			
+			for (j = 0; j < self->itemTbl[i - 1]->_getVariableCount(self->itemTbl[i - 1], globalIndex); j++)
+				if (self->itemTbl[i - 1]->_getVariableIndex(self->itemTbl[i - 1], globalIndex, j) == 
+					varRegIndex)
+					break;
+			if (j == self->itemTbl[i - 1]->_getVariableCount(self->itemTbl[i - 1], globalIndex))
+				continue;
+			
+			valItem = i - 1;
+			valIndex = self->itemTbl[valItem]->_getValueIndex(self->itemTbl[valItem], globalIndex, j);
+			break;
+		}
+	}
+	
+	for (i = 0; i < valItem; i++)
+		valIndex += self->itemTbl[i]->_getValueCount(self->itemTbl[i]);
+	
+	return valIndex;
+}
+
+	
+VariableCondition_ValueIndex _CompositeVC_GetValueCount(void* compositeVC)
+{
+	CompositeVC*			self = (CompositeVC*)compositeVC;
+	VariableCondition_ValueIndex	valCount = 0;
+	Index				i;
+	
+	for (i = 0; i < self->itemCount; i++)
+		valCount += self->itemTbl[i]->_getValueCount(self->itemTbl[i]);
+		
+	return valCount;
+}
+
+	
+VariableCondition_Value _CompositeVC_GetValue(void* compositeVC, VariableCondition_ValueIndex valIndex)
+{
+	CompositeVC*			self = (CompositeVC*)compositeVC;
+	VariableCondition_ValueIndex	valPos = valIndex;
+	Index				i = 0;
+	
+	while (valPos >= self->itemTbl[i]->_getValueCount(self->itemTbl[i]))
+	{
+		valPos -= self->itemTbl[i]->_getValueCount(self->itemTbl[i]);
+		i++;
+/*		if (++i >= self->itemCount)	*/
+			/* Then what? */
+	}
+	
+	return self->itemTbl[i]->_getValue(self->itemTbl[i], valPos);
+}
+
+
+void _CompositeVC_PrintConcise( void* compositeVC, Stream* stream ) {
+	CompositeVC*	self = (CompositeVC*)compositeVC;
+	Index		item_I;
+	
+	Journal_Printf( stream, "\ttype: %s, {\n", self->type );
+	if( self->itemTbl ) {
+		for( item_I = 0; item_I < self->itemCount; item_I++ ) {
+			VariableCondition_PrintConcise( self->itemTbl[item_I], stream );
+		}
+	}
+	Journal_Printf( stream, "}\n" );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+CompositeVC_ItemIndex CompositeVC_Add(void* compositeVC, void* variableCondition, Bool iOwn)
+{
+	CompositeVC*		self = (CompositeVC*)compositeVC;
+	CompositeVC_ItemIndex	handle;
+	
+	if (self->itemCount >= self->_size)
+	{
+		SizeT currentSize = self->_size;
+		
+		self->_size += self->_delta;
+
+		self->itemTbl = Memory_Realloc_Array( self->itemTbl, VariableCondition*, self->_size );
+		memset( (Pointer)((ArithPointer)self->itemTbl + (sizeof(VariableCondition*) * currentSize) ),
+			0, sizeof(VariableCondition*) * (self->_size - currentSize) );
+
+		self->iOwnTbl = Memory_Realloc_Array( self->iOwnTbl, Bool, self->_size );
+		memset( (Pointer)((ArithPointer)self->iOwnTbl + (sizeof(Bool) * currentSize )),
+			0, sizeof(Bool) * (self->_size - currentSize ) );
+	}
+	
+	handle = self->itemCount++;
+	self->itemTbl[handle] = (VariableCondition*) variableCondition;
+	self->iOwnTbl[handle] = iOwn;
+	
+	return handle;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,188 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**
+** <b>Assumptions:</b>
+**
+** <b>Comments:</b>
+**
+** $Id: CompositeVC.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_Automation_CompositeVC_h__
+#define __Base_Automation_CompositeVC_h__
+	
+	
+	extern const Type CompositeVC_Type;
+	
+	
+	#define __CompositeVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		CompositeVC_ItemIndex		itemCount; \
+		VariableCondition**		itemTbl; \
+		Bool*				iOwnTbl; \
+		SizeT				_size; \
+		SizeT				_delta; \
+		void*				data; \
+		IndexSet**			attachedSets; \
+		Bool				hasReadDictionary;
+	
+	struct _CompositeVC { __CompositeVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		CompositeVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						data );
+	
+	CompositeVC*			CompositeVC_New(
+						Name						name,
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						data );
+	
+	CompositeVC*			CompositeVC_DefaultNew( Name name );
+	
+	void				CompositeVC_Init(
+						CompositeVC*					self, 
+						Name						name,
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						data );
+	
+	CompositeVC*			_CompositeVC_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*			_delete,
+						Stg_Class_PrintFunction*			_print,
+						Stg_Class_CopyFunction*				_copy, 
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*		_construct,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*		_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*			_destroy,
+						Name						name,
+						Bool						initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						Variable_Register*				variable_Register,
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						data );
+	
+	void				_CompositeVC_Init(
+						void*						compositeVC,
+						void*						data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_CompositeVC_Delete( void* compositeVC );
+	
+	void				_CompositeVC_Print( void* compositeVC, Stream* stream );
+	
+	/* Copy */
+	#define CompositeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define CompositeVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _CompositeVC_Copy( void* compositeVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_CompositeVC_Build( void* compositeVC, void* data );
+	
+	void				_CompositeVC_Construct( void* compositeVC, Stg_ComponentFactory* cf, void* data );
+	
+	void				_CompositeVC_ReadDictionary( void* compositeVC, void* dictionary );
+	
+	IndexSet*			_CompositeVC_GetSet( void* compositeVC );
+	
+	VariableCondition_VariableIndex	_CompositeVC_GetVariableCount( void* compositeVC, Index globalIndex );
+	
+	Variable_Index			_CompositeVC_GetVariableIndex(
+						void*				compositeVC, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+	
+	VariableCondition_ValueIndex	_CompositeVC_GetValueIndex(
+						void*				compositeVC, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex );
+	
+	VariableCondition_ValueIndex	_CompositeVC_GetValueCount( void* compositeVC );
+	
+	VariableCondition_Value		_CompositeVC_GetValue( void* compositeVC, VariableCondition_ValueIndex valIndex );
+	
+	void				_CompositeVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	CompositeVC_ItemIndex		CompositeVC_Add( void* compositeVC, void* variableCondition, Bool iOwn );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Base_Automation_CompositeVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/CompositeVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">CompositeVC</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">vcName</param>
+		<param name="Type">String</param>
+		<param name="Default">self->name</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+	<struct>
+		<param name="Essential">No</param>
+		<param name="Name">Data</param>
+		<param name="Type">Stg_Component</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 319 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,171 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ConditionFunction.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "ConditionFunction.h"
+
+#include <stdio.h>
+#include <assert.h>
+
+
+const Type ConditionFunction_Type = "ConditionFunction";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+ConditionFunction* ConditionFunction_New(ConditionFunction_ApplyFunc* apply, Name name)
+{
+	return _ConditionFunction_New(sizeof(ConditionFunction), ConditionFunction_Type, _ConditionFunction_Delete,
+		_ConditionFunction_Print, NULL, apply, name);
+}
+
+
+void ConditionFunction_Init(ConditionFunction* self, ConditionFunction_ApplyFunc* apply, Name name)
+{
+	/* General info */
+	self->type = ConditionFunction_Type;
+	self->_sizeOfSelf = sizeof(ConditionFunction);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ConditionFunction_Delete;
+	self->_print = _ConditionFunction_Print;
+	self->_copy = NULL;
+	
+	_Stg_Class_Init((Stg_Class*)self);
+	
+	/* Stg_Class info */
+	_ConditionFunction_Init(self, apply, name);
+}
+
+
+ConditionFunction* _ConditionFunction_New( 
+		SizeT				_sizeOfSelf, 
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print, 
+		Stg_Class_CopyFunction*		_copy, 
+		ConditionFunction_ApplyFunc*	apply,
+		Name				name)
+{
+	ConditionFunction* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(ConditionFunction) );
+	self = (ConditionFunction*)_Stg_Class_New(_sizeOfSelf, type, _delete, _print, _copy);
+	
+	/* General info */
+	
+	/* Virtual functions */
+	
+	/* Stg_Class info */
+	_ConditionFunction_Init(self, apply, name);
+	
+	return self;
+}
+
+
+void _ConditionFunction_Init(void* conditionFunction, ConditionFunction_ApplyFunc* apply, Name name)
+{
+	ConditionFunction*	self = (ConditionFunction*)conditionFunction;
+	
+	self->apply = apply;
+	self->name = name;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _ConditionFunction_Delete(void* conditionFunction)
+{
+	ConditionFunction*	self = (ConditionFunction*)conditionFunction;
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete(self);
+}
+
+
+void _ConditionFunction_Print(void* conditionFunction, Stream* stream)
+{
+	ConditionFunction*	self = (ConditionFunction*)conditionFunction;
+	
+	/* Set the Journal for printing informations */
+	Stream* conditionFunctionStream = stream;
+	
+	/* General info */
+	Journal_Printf( conditionFunctionStream, "ConditionFunction (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( conditionFunctionStream, "\tapply (func ptr): %p\n", self->apply);
+	Journal_Printf( conditionFunctionStream, "\tname (ptr): %p\n", self->name);
+	if (self->name)
+		Journal_Printf( conditionFunctionStream, "\t\tname: %s\n", self->name);
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, conditionFunctionStream );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+void _ConditionFunction_Apply(void* conditionFunction, Index index, Variable_Index var_I, void* context, void* result)
+{
+	ConditionFunction*	self = (ConditionFunction*)conditionFunction;
+	
+	ConditionFunction_Apply(self, index, var_I, context, result);
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,120 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class faciliting the Boundary Condition definition of this system. 
+**	Meshs should only reference this... the base class, not the implementations.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ConditionFunction.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_ConditionFunction_h__
+#define __Base_Automation_ConditionFunction_h__
+
+
+	typedef void	(ConditionFunction_ApplyFunc)	(Index index, Variable_Index var_I, void* context, void* result);
+	
+
+	extern const Type ConditionFunction_Type;
+	
+	
+	#define __ConditionFunction \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Dictionary*				dictionary; \
+		ConditionFunction_ApplyFunc*		apply; \
+		Name					name; \
+		
+	struct _ConditionFunction { __ConditionFunction };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	ConditionFunction*	ConditionFunction_New(ConditionFunction_ApplyFunc* apply, Name name);
+	
+	void			ConditionFunction_Init(ConditionFunction* self, ConditionFunction_ApplyFunc* apply, Name name);
+	
+	ConditionFunction*	_ConditionFunction_New( 
+					SizeT				_sizeOfSelf, 
+					Type				type,
+					Stg_Class_DeleteFunction*		_delete,
+					Stg_Class_PrintFunction*		_print, 
+					Stg_Class_CopyFunction*		_copy, 
+					ConditionFunction_ApplyFunc*	apply,
+					Name				name);
+	
+	void			_ConditionFunction_Init(void* conditionFunction, ConditionFunction_ApplyFunc* apply, Name name);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+
+	void	_ConditionFunction_Delete(void* conditionFunction);
+	
+	void	_ConditionFunction_Print(void* conditionFunction, Stream* stream);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	#define ConditionFunction_Apply(self, index, var_I, context, result) \
+		(self)->apply((index), (var_I), (context), (result))
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	/* Apply the condition function */
+	void	_ConditionFunction_Apply(void* conditionFunction, Index index, Variable_Index var_I, void* context, void* result);
+
+
+#endif /* __Base_Automation_ConditionFunction_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,221 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: ConditionFunction_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "ConditionFunction.h"
+#include "ConditionFunction_Register.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+const Type ConditionFunction_Register_Type = "ConditionFunction_Register";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+ConditionFunction_Register* ConditionFunction_Register_New(void)
+{ 
+	return _ConditionFunction_Register_New( sizeof(ConditionFunction_Register), ConditionFunction_Register_Type, 
+		_ConditionFunction_Register_Delete, _ConditionFunction_Register_Print, NULL);
+}
+
+
+void ConditionFunction_Register_Init(ConditionFunction_Register* self)
+{ 
+	/* General info */
+	self->type = ConditionFunction_Register_Type;
+	self->_sizeOfSelf = sizeof(ConditionFunction_Register);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _ConditionFunction_Register_Delete;
+	self->_print = _ConditionFunction_Register_Print;
+	self->_copy = NULL;
+	
+	_Stg_Class_Init((Stg_Class*)self);
+	
+	/* Stg_Class info */
+	_ConditionFunction_Register_Init(self);
+}
+
+
+ConditionFunction_Register* _ConditionFunction_Register_New( 
+				SizeT			_sizeOfSelf,
+				Type			type,
+				Stg_Class_DeleteFunction*	_delete,
+				Stg_Class_PrintFunction*	_print, 
+				Stg_Class_CopyFunction*	_copy )
+{
+	ConditionFunction_Register*	self;
+	
+	/* Allocate memory */
+	self = (ConditionFunction_Register*)_Stg_Class_New(_sizeOfSelf, type, _delete, _print, _copy);
+	
+	/* Virtual info */
+	
+	/* ConditionFunction_Register info */
+	_ConditionFunction_Register_Init(self);
+	
+	return self;
+}
+
+
+void _ConditionFunction_Register_Init(void* conditionFunction_Register)
+{ 
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	
+	self->count = 0;
+	self->_size = 8;
+	self->_delta = 8;
+	self->_cf = Memory_Alloc_Array( ConditionFunction*, self->_size, "ConditionFunction_Register->_cf" );
+	memset(self->_cf, 0, sizeof(ConditionFunction*)*self->_size);
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _ConditionFunction_Register_Delete(void* conditionFunction_Register)
+{
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	
+	if (self->_cf) Memory_Free(self->_cf);
+		
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete(self);
+}
+
+
+void _ConditionFunction_Register_Print(void* conditionFunction_Register, Stream* stream)
+{
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	
+	/* Set the Journal for printing informations */
+	Stream* conditionFunction_RegisterStream = stream;
+	
+	/* General info */
+	Journal_Printf( conditionFunction_RegisterStream, "ConditionFunction_Register (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* ConditionFunction_Register info */
+	Journal_Printf( conditionFunction_RegisterStream, "\tcount: %u\n", self->count);
+	Journal_Printf( conditionFunction_RegisterStream, "\t_size: %lu\n", self->_size);
+	Journal_Printf( conditionFunction_RegisterStream, "\t_delta: %lu\n", self->_delta);
+	Journal_Printf( conditionFunction_RegisterStream, "\t_cf (ptr): %p\n", self->_cf);
+	if (self->_cf)
+	{
+		ConditionFunction_Index	cf_I;
+		
+		for (cf_I = 0; cf_I < self->count; cf_I++)
+			Journal_Printf( conditionFunction_RegisterStream, "\t\t_cf[%u]: %p\n", cf_I, self->_cf[cf_I]);
+	}
+	
+	/* Parent class info */
+	_Stg_Class_Print( self, conditionFunction_RegisterStream );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+ConditionFunction_Index ConditionFunction_Register_Add(void* conditionFunction_Register, ConditionFunction* cf)
+{
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	Variable_Index			handle;
+	
+	if (self->count >= self->_size)
+	{
+		SizeT currentSize = self->_size;
+		
+		/* Note: why is realloc not used here? */
+		self->_size += self->_delta;
+		
+		self->_cf = Memory_Realloc_Array( self->_cf, ConditionFunction*, self->_size );
+		memset( (Pointer)((ArithPointer)self->_cf + (sizeof(ConditionFunction*) * currentSize) ),
+			0, sizeof(ConditionFunction*) * (self->_size - currentSize) );
+	}
+	
+	handle = self->count++;
+	self->_cf[handle] = cf;
+	
+	return handle;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+ConditionFunction_Index ConditionFunction_Register_GetIndex(void* conditionFunction_Register, Name name)
+{
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	ConditionFunction_Index		cf_I;
+	
+	for (cf_I = 0; cf_I < self->count; cf_I++)
+	{
+		if (self->_cf[cf_I]->name && !strcmp(name, self->_cf[cf_I]->name))
+			return cf_I;
+	}
+	
+	return (ConditionFunction_Index)-1;
+}
+
+
+void ConditionFunction_Register_PrintNameOfEachFunc( void* conditionFunction_Register, Stream* stream ) {
+	ConditionFunction_Register*	self = (ConditionFunction_Register*)conditionFunction_Register;
+	ConditionFunction_Index		cf_I;
+	
+	for (cf_I = 0; cf_I < self->count; cf_I++)
+	{
+		Journal_Printf( stream, "\"%s\", ", self->_cf[cf_I]->name );
+	}
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/ConditionFunction_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,120 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the ConditionFunction_Register such that there is only one set of DOF descriptions (for example, all the nodes have the same
+**	DOF configuration).
+**
+** Assumptions:
+**	All "adding" is done before the ConditionFunction_Register_Build(...), which will be done in the mesh's initialisation.
+**
+** Comments:
+**	You "add" DOF descriptors by using the ConditionFunction_Register_Add( variable_Register, name, offset ), where the "name" is the
+**	textual name for the DOF that will be used in the I/O of the DOF (e.g. for initial and boundary conditions), and "offset" is
+**	the memory offset of the DOF in the construct that it will be used (e.g. node.vel[0]-node ).
+**
+** $Id: ConditionFunction_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_ConditionFunction_Register_h__
+#define __Base_Automation_ConditionFunction_Register_h__
+	
+	
+	extern const Type ConditionFunction_Register_Type;
+	
+	
+	#define __ConditionFunction_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		ConditionFunction_Index			count; \
+		SizeT					_size; \
+		SizeT					_delta; \
+		ConditionFunction**			_cf; \
+		
+	struct _ConditionFunction_Register { __ConditionFunction_Register };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	ConditionFunction_Register*	ConditionFunction_Register_New(void);
+	
+	void				ConditionFunction_Register_Init(ConditionFunction_Register* self);
+	
+	ConditionFunction_Register*	_ConditionFunction_Register_New( 
+						SizeT			_sizeOfSelf,
+						Type			type,
+						Stg_Class_DeleteFunction*	_delete,
+						Stg_Class_PrintFunction*	_print,
+						Stg_Class_CopyFunction*	_copy );
+		
+	void				_ConditionFunction_Register_Init(void* conditionFunction_Register);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void	_ConditionFunction_Register_Delete( void* conditionFunction_Register );
+	
+	void	_ConditionFunction_Register_Print( void* conditionFunction_Register, Stream* stream );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	ConditionFunction_Index	ConditionFunction_Register_Add(void* conditionFunction_Register, ConditionFunction* cf);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	ConditionFunction_Index	ConditionFunction_Register_GetIndex(void* conditionFunction_Register, Name name);
+
+	void ConditionFunction_Register_PrintNameOfEachFunc( void* conditionFunction_Register, Stream* stream );
+
+	
+#endif /* __Base_Automation_ConditionFunction_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,334 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: DocumentationComponentFactory.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "LiveComponentRegister.h"
+#include "Stg_ComponentFactory.h"
+#include "DocumentationComponentFactory.h"
+#include "HierarchyTable.h"
+#include "Stg_ComponentRegister.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+#define COMPONENT_TYPE_STRING_LENGTH 30
+
+/* Textual name of this class */
+const Type DocumentationComponentFactory_Type = "DocumentationComponentFactory";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+	
+DocumentationComponentFactory* DocumentationComponentFactory_New( Stg_ObjectList* registerRegister ) {
+	DocumentationComponentFactory *self = NULL;
+
+	self = _DocumentationComponentFactory_New( 
+			sizeof( DocumentationComponentFactory ), 
+			DocumentationComponentFactory_Type,
+			_DocumentationComponentFactory_Delete,
+			_DocumentationComponentFactory_Print,
+			NULL,
+			_DocumentationComponentFactory_GetDouble,
+			_DocumentationComponentFactory_GetInt,
+			_DocumentationComponentFactory_GetUnsignedInt,
+			_DocumentationComponentFactory_GetBool,
+			_DocumentationComponentFactory_GetString,
+			_DocumentationComponentFactory_GetRootDictDouble,
+			_DocumentationComponentFactory_GetRootDictInt,
+			_DocumentationComponentFactory_GetRootDictUnsignedInt,
+			_DocumentationComponentFactory_GetRootDictBool,
+			_DocumentationComponentFactory_GetRootDictString,
+			_DocumentationComponentFactory_ConstructByName,
+			_DocumentationComponentFactory_ConstructByKey,
+			_DocumentationComponentFactory_ConstructByNameWithKeyFallback,
+			_DocumentationComponentFactory_ConstructByList,
+			registerRegister );
+
+	return self;
+}
+
+/* Creation implementation */
+DocumentationComponentFactory* _DocumentationComponentFactory_New( 
+		SizeT                                                    _sizeOfSelf,
+		Type                                                     type,
+		Stg_Class_DeleteFunction*                                _delete,
+		Stg_Class_PrintFunction*                                 _print,
+		Stg_Class_CopyFunction*                                  _copy,
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble,
+		Stg_ComponentFactory_GetIntFunc*                         getInt,
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt,
+		Stg_ComponentFactory_GetBoolFunc*                        getBool,
+		Stg_ComponentFactory_GetStringFunc*                      getString,
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble,
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt,
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt,
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool,
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString,
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName,
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey,
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback,
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList,
+		Stg_ObjectList*                                          registerRegister )
+{
+	DocumentationComponentFactory *self = NULL;
+
+	assert( _sizeOfSelf >= sizeof( DocumentationComponentFactory ) );
+	self = (DocumentationComponentFactory*) _Stg_ComponentFactory_New( 
+			_sizeOfSelf,
+			type, 
+			_delete,
+			_print,
+			_copy,
+			getDouble,
+			getInt,
+			getUnsignedInt,
+			getBool,
+			getString,
+			getRootDictDouble,
+			getRootDictInt,
+			getRootDictUnsignedInt,
+			getRootDictBool,
+			getRootDictString,
+			constructByName,
+			constructByKey,
+			constructByNameWithKeyFallback,
+			constructByList,
+			NULL,
+			NULL,
+			registerRegister );
+
+	return self;
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _DocumentationComponentFactory_Delete( void* componentFactory ) {
+	DocumentationComponentFactory *self = (DocumentationComponentFactory *) componentFactory;
+
+	_Stg_ComponentFactory_Delete( self );
+}
+	
+void _DocumentationComponentFactory_Print( void* componentFactory, Stream* stream ) {
+	DocumentationComponentFactory *self = (DocumentationComponentFactory*) componentFactory;
+
+	assert( self );
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "DocumentationComponentFactory (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_ComponentFactory_Print( self, stream );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+double _DocumentationComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, const double Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'double' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}
+
+int _DocumentationComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, const int Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'int' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}	
+
+unsigned int _DocumentationComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, const unsigned int Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'unsigned int' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}	
+
+Bool _DocumentationComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, const Bool Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'Bool' - ", key );
+	Journal_PrintBool( self->infoStream, Default );
+	return Default;
+}	
+
+char* _DocumentationComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Parameter - Key '%s' - Type 'string' - ", key );
+	Journal_PrintString( self->infoStream, Default );
+	return (char*)Default;
+}
+
+double _DocumentationComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'double' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}
+
+int _DocumentationComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'int' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}	
+
+unsigned int _DocumentationComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'unsigned int' - ", key );
+	Journal_PrintValue( self->infoStream, Default );
+	return Default;
+}	
+
+Bool _DocumentationComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'Bool' - ", key );
+	Journal_PrintBool( self->infoStream, Default );
+	return Default;
+}	
+
+char* _DocumentationComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* const Default ) {
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	Journal_Printf( self->infoStream, "Root Dictionary Parameter - Key '%s' - Type 'string' - ", key );
+	Journal_PrintString( self->infoStream, Default );
+	return (char*)Default;
+}
+
+
+Stg_Component* _DocumentationComponentFactory_ConstructByName( 
+		void*			cf, 
+		Name			componentName, 
+		Type			type, 
+		Bool			isEssential, 
+		void*			data )
+{
+	DocumentationComponentFactory*    self              = (DocumentationComponentFactory*) cf;
+
+	Journal_Printf( self->infoStream, "%sEssential Component - Type '%s' - Name = '%s'\n", 
+			( isEssential ? "" : "Non-" ), type, componentName );
+
+	return NULL;
+}
+
+Stg_Component* _DocumentationComponentFactory_ConstructByKey( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Dictionary_Entry_Key	componentKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) 
+{
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	
+	Journal_Printf( self->infoStream, "%sEssential Component - Type '%s' - Key = '%s'\n", 
+			( isEssential ? "" : "Non-" ), type, componentKey );
+
+	return NULL;
+}
+
+Stg_Component* _DocumentationComponentFactory_ConstructByNameWithKeyFallback( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Name			componentTrialName, 
+		Dictionary_Entry_Key	fallbackKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) 
+{
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*) cf;
+	
+	Journal_Printf( self->infoStream, "%sEssential Component - Type '%s' - Trial Name = '%s' - Fall back key = '%s'\n", 
+			( isEssential ? "" : "Non-" ), type, componentTrialName, fallbackKey );
+
+	return NULL;
+}
+
+Stg_Component** _DocumentationComponentFactory_ConstructByList( 
+		void*			componentFactory, 
+		Name			parentComponentName, 
+		Name			listName, 
+		unsigned int		maxComponents,
+		Type			type,
+		Bool			isEssential,
+		unsigned int*		componentCount,
+		void*			data )
+{
+	DocumentationComponentFactory* self = (DocumentationComponentFactory*)componentFactory;
+
+	Journal_Printf( self->infoStream, "%sEssential Components of type '%s' in list named '%s'\n", 
+			( isEssential ? "" : "Non-" ), type, listName );
+
+	return NULL;
+}
+
+void DocumentationComponentFactory_DocumentType( void* cf, Name typeName ) {
+	DocumentationComponentFactory*             self              = (DocumentationComponentFactory*) cf;
+	Stg_Component_DefaultConstructorFunction*  defaultConstructor;
+	Stg_Component*                             component;
+	Stream*                                    stream            = self->infoStream;
+	Type                                       type;
+
+	type = HierarchyTable_GetTypePtrFromName( HierarchyTable_GetHierarchyTable(), typeName );
+			
+	Stream_Enable( stream, False );
+
+	defaultConstructor = Stg_ComponentRegister_AssertGet( 
+			Stg_ComponentRegister_Get_ComponentRegister(), type, "0" );
+
+	component = (Stg_Component*) defaultConstructor( "componentName" );
+
+	Stream_Enable( stream, True );
+	Journal_Printf( stream, "Class '%s'\n", type );
+	Stream_Indent( stream );
+
+	Journal_Printf( stream, "Parent - %s\n", GetParent( type ) );
+
+	Stg_Component_Construct( component, (Stg_ComponentFactory*)self, 0 /* dummy */, True );
+
+	Stg_Class_Delete( component );
+	Stream_UnIndent( self->infoStream );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/DocumentationComponentFactory.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,143 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: DocumentationComponentFactory.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#ifndef __Base_Automation_DocumentationComponentFactory_h__
+#define __Base_Automation_DocumentationComponentFactory_h__
+
+	extern const Type DocumentationComponentFactory_Type;
+	
+	#define __DocumentationComponentFactory \
+		/* General info */ \
+		__Stg_ComponentFactory \
+		\
+		/* Virtual info */ \
+		\
+		/* Class info */ \
+		
+	struct DocumentationComponentFactory { __DocumentationComponentFactory };
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	/* Creation implementation */
+	DocumentationComponentFactory* DocumentationComponentFactory_New( Stg_ObjectList* registerRegister );
+	
+	DocumentationComponentFactory* _DocumentationComponentFactory_New( 
+		SizeT                                                    _sizeOfSelf,
+		Type                                                     type,
+		Stg_Class_DeleteFunction*                                _delete,
+		Stg_Class_PrintFunction*                                 _print,
+		Stg_Class_CopyFunction*                                  _copy,
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble,
+		Stg_ComponentFactory_GetIntFunc*                         getInt,
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt,
+		Stg_ComponentFactory_GetBoolFunc*                        getBool,
+		Stg_ComponentFactory_GetStringFunc*                      getString,
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble,
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt,
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt,
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool,
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString,
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName,
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey,
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback,
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList,
+		Stg_ObjectList*                                          registerRegister );
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _DocumentationComponentFactory_Delete( void* DocumentationComponentFactory );
+	
+	void _DocumentationComponentFactory_Print( void* DocumentationComponentFactory, Stream* stream );
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	Dictionary_Entry_Value* _DocumentationComponentFactory_GetDictionaryValue( 
+			void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) ;
+
+	/** Function to get *numerical* values from component's dictionary
+	 * if the key in the sub-dictionary gives a string then it assumes 
+	 * that this is a key that points to the root dictionary */
+	Dictionary_Entry_Value* _DocumentationComponentFactory_GetNumericalValue( void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) ;
+
+	double _DocumentationComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, const double defaultVal ) ;
+	int _DocumentationComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, const int defaultVal ) ;
+	unsigned int _DocumentationComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	Bool _DocumentationComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	char* _DocumentationComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) ;
+	
+	double _DocumentationComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) ;
+	int _DocumentationComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) ;
+	unsigned int _DocumentationComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	Bool _DocumentationComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	char* _DocumentationComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* defaultVal ) ;
+
+	Stg_Component* _DocumentationComponentFactory_ConstructByName( 
+		void*			componentFactory, 
+		Name			componentName, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+	Stg_Component* _DocumentationComponentFactory_ConstructByKey( 
+		void*			componentFactory, 
+		Name			parentComponentName, 
+		Dictionary_Entry_Key	componentKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+	Stg_Component* _DocumentationComponentFactory_ConstructByNameWithKeyFallback( 
+		void*			componentFactory, 
+		Name			parentComponentName, 
+		Name			componentTrialName, 
+		Dictionary_Entry_Key	componentTrialKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+	Stg_Component** _DocumentationComponentFactory_ConstructByList( 
+		void*			componentFactory, 
+		Name			parentComponentName, 
+		Name			listName, 
+		unsigned int		maxComponents,
+		Type			type,
+		Bool			isEssential,
+		unsigned int*		componentCount,
+		void*			data );
+
+	void DocumentationComponentFactory_DocumentType( void* cf, Type type ) ;
+
+#endif /* __Base_Automation_DocumentationComponentFactory_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,56 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Finalise.c 3645 2006-06-19 06:31:44Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Finalise.h"
+
+#include "VariableCondition_Register.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentRegister.h"
+#include "HierarchyTable.h"
+#include "CallGraph.h"
+#include <stdio.h>
+
+Bool BaseAutomation_Finalise( void ) {
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	/* Clean up global variable */
+	Stg_Class_Delete( variableCondition_Register );
+	Stg_Class_Delete( stgComponentRegister );
+	Stg_Class_Delete( stgHierarchyTable );
+	Stg_Class_Delete( stgCallGraph );
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Finalise.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,46 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Finalise.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_BaseAutomation_Finalise_h__
+#define __Base_BaseAutomation_Finalise_h__
+	
+	Bool BaseAutomation_Finalise( void );
+	
+#endif /* __Base_BaseAutomation_Finalise_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,181 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: HierarchyTable.c 3652 2006-06-27 01:11:50Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentRegister.h"
+#include "HierarchyTable.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type HierarchyTable_Type = "HierarchyTable";
+
+/* Global pointer to singleton */
+HierarchyTable* stgHierarchyTable = NULL;
+
+HierarchyTable* HierarchyTable_New( void ) {
+	HierarchyTable* self = NULL;
+
+	if( stgHierarchyTable == NULL ){
+		self = (HierarchyTable*) HashTable_New( NULL, NULL, NULL, HASHTABLE_POINTER_KEY );
+	}
+	else{
+		self = stgHierarchyTable;
+	}
+
+	return self;
+}
+	
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+int HierarchyTable_RegisterParent( void* hierarchyTable, Type childType, Type parentType ) {
+	HierarchyTable *self = (HierarchyTable*) hierarchyTable;
+
+	return HashTable_InsertEntry( (HashTable*) self, childType, sizeof(const Type), parentType, sizeof(const Type) );
+}
+
+Bool HierarchyTable_IsChild( void* hierarchyTable, Type childType, Type possibleParentType ) {
+	HierarchyTable* self     = (HierarchyTable*) hierarchyTable;
+	Type            currType;
+	
+	/* Starting from 'childType', sweep through Hierarchy Table, going from parent to parent.
+	 * Keep going until the Hierarchy Table produces a NULL - this means that we've reached the end of the table */
+	for ( currType = childType ; currType != NULL ; currType = HierarchyTable_GetParent( self, currType ) ) {
+		/* Test if this parent is the same as the one being tested for */
+		if ( currType == possibleParentType )
+			return True;
+	}
+
+	/* If we've gone through every parent in the table and reached the end - 
+	 * then 'childType' cannot be a child of 'possibleParentType' */
+	return False;
+}
+
+void HierarchyTable_PrintParents( void* hierarchyTable, Type childType, Stream* stream ) {
+	HierarchyTable* self     = (HierarchyTable*) hierarchyTable;
+	Type            parentType;
+
+	Journal_Printf( stream, "Type '%s' inherits from:\n", childType );
+
+	parentType = HierarchyTable_GetParent( self, childType );
+	for ( ; parentType != NULL ; parentType = HierarchyTable_GetParent( self, parentType ) ) {
+		Journal_Printf( stream, "\t%s\n", parentType );
+	}
+}
+
+void HierarchyTable_PrintChildren( void* hierarchyTable, Type parentType, Stream* stream ) {
+	HierarchyTable*    self     = (HierarchyTable*) hierarchyTable;
+	HashTable_Entry*   hashTableEntry;
+	Index              entry_I;
+	Stg_ComponentRegister* componentRegister = Stg_ComponentRegister_Get_ComponentRegister();
+
+	Journal_Printf( stream, "%s \t\t\t (%s Class)\n", 
+			parentType, ( Stg_ComponentRegister_Get( componentRegister, parentType, "0" ) ? "Concrete" : "Abstract" ) );
+	Stream_Flush( stream );
+	Stream_Indent( stream );
+
+	for ( entry_I = 0 ; entry_I < self->max ; entry_I++ ) {
+		hashTableEntry = self->entries[ entry_I ];
+
+		while( hashTableEntry ){
+			if ( (Type) hashTableEntry->data == parentType ) {
+				HierarchyTable_PrintChildren( self, (Type)hashTableEntry->key, stream );
+			}
+			hashTableEntry = hashTableEntry->next;
+		}
+
+	}
+	Stream_UnIndent( stream );
+}
+
+
+Stg_Class* Stg_Class_CheckType( void* classPtr, Type possibleParentType ) {
+	Stg_Class* self = (Stg_Class*) classPtr;
+	/* Check if the pointer is null */
+	Journal_Firewall(
+		self != NULL,
+		Journal_Register( Error_Type, HierarchyTable_Type ),
+		"Error doing type checking against possibleParentType %s - pointer is NULL.\n",
+		possibleParentType );
+	
+	if ( ! Stg_Class_IsInstance( self, possibleParentType ) ) {
+		Stream* stream = Journal_Register( Error_Type, HierarchyTable_Type );
+		
+		Journal_Printf( stream, "Error doing type checking:\nTrying to cast " );
+
+		/* Give the user the name of the object if you can */
+		if ( Stg_Class_IsInstance( classPtr, Stg_Object_Type ) ) 
+			Journal_Printf( stream, "'%s' ", ((Stg_Object*)classPtr)->name );
+		else 		
+			Journal_Printf( stream, "pointer '%p' ", classPtr );
+
+		Journal_Printf( stream, 
+				"as '%s' when it is actually of type '%s'.\n",
+				possibleParentType, self->type );
+		
+		PrintParents( possibleParentType, stream );
+		
+		Journal_Firewall( 
+			0,
+			stream, 
+			"Either the HierarchyTable for this class is incorrect or this object has been cast incorrectly.\n" );
+	}
+	return self;
+}
+
+Type HierarchyTable_GetTypePtrFromName( void* hierarchyTable, Name typeName ) {
+	HierarchyTable*    self     = (HierarchyTable*) hierarchyTable;
+	HashTable_Entry*   hashTableEntry;
+	Index              entry_I;
+
+	for ( entry_I = 0 ; entry_I < self->max ; entry_I++ ) {
+		hashTableEntry = self->entries[ entry_I ];
+
+		while( hashTableEntry ){
+			if ( strcmp( (Type) hashTableEntry->key, typeName ) == 0 )
+				return (Type) hashTableEntry->key;
+		
+			hashTableEntry = hashTableEntry->next;
+		}
+
+	}
+	return NULL;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/HierarchyTable.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,120 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class for objects that are named.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: HierarchyTable.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_HierarchyTable_h__
+#define __Base_Automation_HierarchyTable_h__
+	
+	/* Textual name of this class */
+	extern const Type HierarchyTable_Type;
+
+	extern HierarchyTable *stgHierarchyTable;
+	
+	/* HierarchyTable information */
+	#define __HierarchyTable \
+		/* General info */ \
+		__HashTable \
+		\
+		/* Virtual info */ \
+		\
+		/* HierarchyTable info */ \
+	
+	struct HierarchyTable { __HierarchyTable };
+	
+	/** Constructor Implementation */
+	HierarchyTable* HierarchyTable_New(  );
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	/** This function returns the pointer to the singleton "stgHierarchyTable" */
+	#define HierarchyTable_GetHierarchyTable() \
+		((HierarchyTable*) stgHierarchyTable )
+	
+	/** Function to be called once per class and registers it's parent in the Hierarchy hash table 
+	 * the pointer to the child's type string can then be used as a key to find the pointer the 
+	 * parent's type string */
+	int HierarchyTable_RegisterParent( void* hierarchyTable, Type childType, Type parentType ) ;
+
+	/** Shortcut to above function - it grabs the pointer to the HierarchyTable singleton for you */
+	#define RegisterParent( childType, parentType ) \
+		HierarchyTable_RegisterParent( HierarchyTable_GetHierarchyTable(), (childType), (parentType) )
+
+	/** Macro to get immediate parent for a type */
+	#define HierarchyTable_GetParent( hierarchyTable, type ) \
+		(Type) HashTable_FindEntryFunction( (HashTable*) hierarchyTable, type, sizeof(const Type) )
+
+	/** Shortcut to above macro - Gets the HierarchyTable pointer for you */
+	#define GetParent( type ) \
+		HierarchyTable_GetParent( HierarchyTable_GetHierarchyTable(), type )
+	
+	/** Function to keep going up the hierarchy to test whether a certain type is a child of a another type */
+	Bool HierarchyTable_IsChild( void* hierarchyTable, Type childType, Type possibleParentType ) ;
+
+	/** Shortcut to above function - it grabs the pointer to the HierarchyTable singleton for you */
+	#define IsChild( childType, possibleParentType ) \
+		HierarchyTable_IsChild( HierarchyTable_GetHierarchyTable(), (childType), (possibleParentType) )
+
+	/** Macro which checks to see if a specific pointer to an object is an instance of a class -
+	 * i.e. it's type is a child of this 'possibleParentType' */
+	#define Stg_Class_IsInstance( classPtr, possibleParentType )\
+			IsChild( ((Stg_Class*) classPtr)->type, (possibleParentType) )
+
+	#define Stg_CheckType( classPtr, possibleParentTypedef ) \
+		(possibleParentTypedef*) Stg_Class_CheckType( classPtr, possibleParentTypedef ## _Type )
+
+	#ifdef DEBUG
+		#define Stg_DCheckType Stg_CheckType
+	#else
+		#define Stg_DCheckType( classPtr, possibleParentTypedef ) \
+			(possibleParentTypedef*) (classPtr)
+	#endif
+
+	Stg_Class* Stg_Class_CheckType( void* classPtr, Type possibleParentType );
+
+	void HierarchyTable_PrintParents( void* hierarchyTable, Type childType, Stream* stream ) ;
+	void HierarchyTable_PrintChildren( void* hierarchyTable, Type parentType, Stream* stream ) ;
+
+	#define PrintParents( childType, stream ) \
+		HierarchyTable_PrintParents( HierarchyTable_GetHierarchyTable(), (childType), (stream) )
+	#define PrintChildren( parentType, stream ) \
+		HierarchyTable_PrintChildren( HierarchyTable_GetHierarchyTable(), (parentType), (stream) )
+
+	Type HierarchyTable_GetTypePtrFromName( void* hierarchyTable, Name typeName ) ;
+
+#endif /* __Base_Automation_HierarchyTable_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,111 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Init.c 3881 2006-10-26 03:14:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Init.h"
+#include "VariableCondition_Register.h"
+#include "ConditionFunction_Register.h"
+#include "Variable_Register.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentRegister.h"
+#include "Stg_ComponentFactory.h"
+#include "Variable.h"
+#include "VariableCondition.h"
+#include "SetVC.h"
+#include "CompositeVC.h"
+#include "ConditionFunction.h"
+#include "VariableAllVC.h"
+#include "HierarchyTable.h"
+#include "CallGraph.h"
+
+#include "VariableDumpStream.h"
+
+#include <stdio.h>
+
+Bool BaseAutomation_Init( int* argc, char** argv[] ) 
+{
+	Stream* typedStream;
+	
+	Journal_Printf( Journal_Register( DebugStream_Type, "Context" ), "In: %s\n", __func__ ); /* DO NOT CHANGE OR REMOVE */
+	
+	variableCondition_Register = VariableCondition_Register_New();
+	VariableCondition_Register_Add( variableCondition_Register, SetVC_Type, SetVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, CompositeVC_Type, CompositeVC_Factory );
+	VariableCondition_Register_Add( variableCondition_Register, VariableAllVC_Type, VariableAllVC_Factory );
+
+	typedStream = VariableDumpStream_New( VariableDumpStream_Type );
+	Stream_Enable( typedStream, True );
+	Stream_SetLevel( typedStream, 1 );
+	Stream_SetFile( typedStream, stJournal->stdOut );
+	
+	Journal_RegisterTypedStream( typedStream );
+	
+	/** Initializing the Component Register singleton */
+	stgComponentRegister = Stg_ComponentRegister_New( );
+	
+	/** Initializing the Hierarchy Table singleton */
+	stgHierarchyTable = HierarchyTable_New();
+
+	/** Initializing the Call Graph singleton */
+	stgCallGraph = Stg_CallGraph_New();
+
+	/** Initializing the ComponentRegister singleton */
+	
+	/** Adding default constructors of various components to the Stg_ComponentRegister */
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), Variable_Type, "0", (Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), CompositeVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)CompositeVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), SetVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)SetVC_DefaultNew );
+	Stg_ComponentRegister_Add( Stg_ComponentRegister_Get_ComponentRegister(), VariableAllVC_Type, "0", (Stg_Component_DefaultConstructorFunction*)VariableAllVC_DefaultNew );
+
+	/** Register Parents for All Classes */
+	RegisterParent( Stg_ComponentFactory_Type,           Stg_Class_Type );
+	RegisterParent( Stg_ComponentRegister_Type,          Stg_Class_Type );
+	RegisterParent( Stg_Component_Type,                  Stg_Object_Type );
+	RegisterParent( VariableCondition_Type,          Stg_Component_Type );
+	RegisterParent( CompositeVC_Type,                VariableCondition_Type );
+	RegisterParent( ConditionFunction_Type,          Stg_Class_Type );
+	RegisterParent( ConditionFunction_Register_Type, Stg_Class_Type );
+	RegisterParent( HierarchyTable_Type,             HashTable_Type );
+	RegisterParent( Stg_CallGraph_Type,              Stg_Class_Type );
+	RegisterParent( Variable_Type,                   Stg_Component_Type );
+	RegisterParent( VariableAllVC_Type,              VariableCondition_Type );
+	RegisterParent( VariableCondition_Register_Type, Stg_Class_Type );
+	RegisterParent( VariableDumpStream_Type,         CStream_Type );
+	RegisterParent( Variable_Register_Type,          Stg_Class_Type );
+
+	return True;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Init.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,47 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	performs and pre-running initialisation necessary in this directory.
+**
+** Assumptions:
+**	
+**
+** Comments:
+**	None as yet.
+**
+** $Id: Init.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_BaseAutomation_Init_h__
+#define __Base_BaseAutomation_Init_h__
+	
+	Bool BaseAutomation_Init( int* argc, char** argv[] );
+	
+#endif /* __Base_BaseAutomation_Init_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,234 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: LiveComponentRegister.c 2745 2005-05-10 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "LiveComponentRegister.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type LiveComponentRegister_Type = "LiveComponentRegister";
+LiveComponentRegister* stgLiveComponentRegister = NULL;
+
+LiveComponentRegister* _LiveComponentRegister_New( 
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*			_copy )
+{
+	LiveComponentRegister *self = NULL;
+
+	assert( _sizeOfSelf >= sizeof( LiveComponentRegister ) );
+	self = (LiveComponentRegister*) _Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	return self;
+}
+	
+LiveComponentRegister* LiveComponentRegister_New(  )
+{
+	LiveComponentRegister *self = NULL;
+
+	self = _LiveComponentRegister_New( sizeof( LiveComponentRegister ), 
+					LiveComponentRegister_Type,
+					_LiveComponentRegister_Delete,
+					_LiveComponentRegister_Print,
+					NULL);
+
+	LiveComponentRegister_Init( self );
+
+	if ( !stgLiveComponentRegister ) {
+		stgLiveComponentRegister = self;
+	}
+	return self;
+}
+
+void _LiveComponentRegister_Init( LiveComponentRegister *self )
+{
+}
+	
+void LiveComponentRegister_Init( LiveComponentRegister *self )
+{
+	assert( self );
+
+	self->componentList = Stg_ObjectList_New( );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _LiveComponentRegister_Delete( void* liveComponentRegister )
+{
+	LiveComponentRegister *self = (LiveComponentRegister *) liveComponentRegister;
+
+	assert( self );
+
+	// TODO: add some debug printing about this...
+	LiveComponentRegister_DeleteAll( self );
+	Stg_Class_Delete( self->componentList );
+
+	/* Note: this has to come after the LCRegister delete all, in case any of the
+	components need to refer to it as part of their delete phase */
+	if ( stgLiveComponentRegister == self ) {
+		stgLiveComponentRegister = NULL;
+	}
+
+	_Stg_Class_Delete( self );
+}
+
+void _LiveComponentRegister_Print( void* liveComponentRegister, Stream* stream )
+{
+	LiveComponentRegister *self = (LiveComponentRegister *) liveComponentRegister;
+
+	assert( self );
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "LiveComponentRegister (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+	
+	Journal_Printf( (void*) stream, "componentList (ptr): %p\n", self->componentList );
+	Stg_Class_Print( self->componentList, stream );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+Index LiveComponentRegister_Add( LiveComponentRegister *self, Stg_Component *component )
+{
+	assert( self );
+	return Stg_ObjectList_Append( self->componentList, component );
+}
+	
+Stg_Component *LiveComponentRegister_Get( LiveComponentRegister *self, Name name )
+{
+	assert( self );
+	
+	return ( Stg_Component* ) Stg_ObjectList_Get( self->componentList, name );
+}
+
+Stg_Component *LiveComponentRegister_At( void* liveComponentRegister, Index index ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	assert( self );
+
+	return ( Stg_Component* ) Stg_ObjectList_At( self->componentList, index );
+}
+
+
+Index LiveComponentRegister_RemoveOneComponentsEntry( void* liveComponentRegister, Name name ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	assert( self );
+
+	/* Note: as specified in the header, we don't want to actually delete the component, just
+	the entry */
+	return Stg_ObjectList_Remove( self->componentList, name, KEEP );
+}
+
+	
+unsigned int LiveComponentRegister_GetCount( LiveComponentRegister *self )
+{
+	assert( self );
+
+	return self->componentList->count;
+}
+
+
+void LiveComponentRegister_BuildAll( void* liveComponentRegister, void* data ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	Stg_Component*             component;
+	Index                  index;
+	Index                  count     = LiveComponentRegister_GetCount( self );
+	
+	for ( index = 0 ; index < count ; index++ ) {
+		component = LiveComponentRegister_At( self, index );
+		Build( component, data, False );
+	}
+}
+
+
+void LiveComponentRegister_InitialiseAll( void* liveComponentRegister, void* data ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	Stg_Component*             component;
+	Index                  index;
+	Index                  count     = LiveComponentRegister_GetCount( self );
+	
+	for ( index = 0 ; index < count ; index++ ) {
+		component = LiveComponentRegister_At( self, index );
+		Initialise( component, data, False );
+	}
+}
+
+
+void LiveComponentRegister_DeleteAll( void* liveComponentRegister ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+	Stg_Component*             component;
+	Index                  index;
+	
+	/* Note: have to recompute count dynamically each loop in case a component deletes
+	some other components */
+	for ( index = 0 ; index < LiveComponentRegister_GetCount( self ) ; index++ ) {
+		component = LiveComponentRegister_At( self, index );
+		//printf( "Freeing component \"%s\" (type %s)\n", component->name, component->type );
+		Stg_Class_Delete( component );
+	}
+	self->componentList->count = 0;
+}
+
+
+LiveComponentRegister* LiveComponentRegister_GetLiveComponentRegister() {
+	return stgLiveComponentRegister;
+}
+
+void LiveComponentRegister_PrintSimilar( void* liveComponentRegister, Name name, Stream* stream, unsigned int number ) {
+	LiveComponentRegister* self      = (LiveComponentRegister *) liveComponentRegister;
+
+	Stg_ObjectList_PrintSimilar( self->componentList, name, stream, number );
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/LiveComponentRegister.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,104 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: LiveComponentRegister.h 2745 2005-05-10 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#ifndef __Base_Automation_LiveComponentRegister_h__
+#define __Base_Automation_LiveComponentRegister_h__
+
+	extern const Type LiveComponentRegister_Type;
+	extern LiveComponentRegister* stgLiveComponentRegister; /**< Live components singleton. */
+	
+	#define __LiveComponentRegister \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Class info */ \
+		Stg_ObjectList			*componentList;
+		
+	struct LiveComponentRegister { __LiveComponentRegister };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+		/* Creation implementation */
+	LiveComponentRegister* _LiveComponentRegister_New( 
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*			_copy
+		);
+	
+	LiveComponentRegister* LiveComponentRegister_New(  );
+
+	void _LiveComponentRegister_Init( LiveComponentRegister *self );
+	
+	void LiveComponentRegister_Init( LiveComponentRegister *self );
+
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _LiveComponentRegister_Delete( void* liveComponentRegister );
+	
+	void _LiveComponentRegister_Print( void* liveComponentRegister, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	Index LiveComponentRegister_Add( LiveComponentRegister *self, Stg_Component *component );
+	
+	Stg_Component *LiveComponentRegister_Get( LiveComponentRegister *self, Name name );
+	Stg_Component *LiveComponentRegister_At( void* liveComponentRegister, Index index ) ;
+	
+	/** Delete's the entry referring to a component, but not the *component referred to*. This
+	is useful when another class needs to delete a component from the lcRegister before the 
+	lcRegister does it as part of DeleteAll - such as with Codelets which must be deleted
+	before the plugin dlls are closed. */
+	Index LiveComponentRegister_RemoveOneComponentsEntry( void* liveComponentRegister, Name name );
+	unsigned int LiveComponentRegister_GetCount( LiveComponentRegister *self );
+
+	void LiveComponentRegister_BuildAll( void* liveComponentRegister, void* data ) ;
+	void LiveComponentRegister_InitialiseAll( void* liveComponentRegister, void* data ) ;
+	void LiveComponentRegister_DeleteAll( void* liveComponentRegister ) ;
+
+	LiveComponentRegister* LiveComponentRegister_GetLiveComponentRegister();
+
+	void LiveComponentRegister_PrintSimilar( void* liveComponentRegister, Name name, Stream* stream, unsigned int number ) ;
+#endif /* __Base_Automation_LiveComponentRegister_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Make.mm 1260 2004-04-20 20:01:15Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+PACKAGE = lib${def_lib}
+
+PROJ_LIB = $(BLD_LIBDIR)/$(PACKAGE).a
+#PROJ_DLL = $(BLD_LIBDIR)/$(PACKAGE).$(EXT_SO)
+PROJ_DLL = 
+PROJ_TMPDIR = $(BLD_TMPDIR)/$(PROJECT)/$(PACKAGE)
+PROJ_CLEAN += $(PROJ_LIB) $(PROJ_DLL) $(PROJ_OBJS)
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain -I$(BLD_INCDIR)/${def_inc} `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_lib}\"
+PROJ_INCDIR = $(BLD_INCDIR)/${def_inc}
+
+PROJ_SRCS = ${def_srcs}
+
+# I keep file lists to build a monolith .so from a set of .a's
+PROJ_OBJS_IN_TMP = ${addprefix $(PROJECT)/$(PACKAGE)/, ${addsuffix .o, ${basename $(PROJ_SRCS)}}}
+PROJ_OBJLIST = $(BLD_TMPDIR)/$(PROJECT).$(PACKAGE).objlist
+
+SED = sed
+OBJLISTS=${addprefix ${BLD_TMPDIR}/${PROJECT}.lib, ${addsuffix .objlist, ${def_objlists}}}
+SUBPROJ_OBJS=${patsubst %, `cat % | ${SED} 's/^/${subst /,\/,${BLD_TMPDIR}}\//g' | ${SED} 's/ / ${subst /,\/,${BLD_TMPDIR}}\//g'` , ${OBJLISTS}}
+
+all: $(PROJ_LIB) createObjList appendSubLibs $(PROJ_DLL) export
+
+createObjList:: 
+	@echo ${PROJ_OBJS_IN_TMP} | cat > ${PROJ_OBJLIST}
+	@if test ! "${OBJLISTS}x" = "x"; then cat ${OBJLISTS} | cat >> ${PROJ_OBJLIST}; fi
+
+appendSubLibs::
+	$(AR) -q $(PROJ_LIB) $(SUBPROJ_OBJS)
+	$(RANLIB) $(RANFLAGS) $(PROJ_LIB)
+
+$(PROJ_DLL): product_dirs $(PROJ_OBJS)
+	$(CC) -o $(PROJ_DLL) $(PROJ_OBJS) $(SUBPROJ_OBJS) $(COMPILER_LCC_SOFLAGS) $(LCCFLAGS) $(PROJ_LIBRARIES)
+
+#export:: export-headers
+export:: export-headers export-libraries
+EXPORT_HEADERS = ${def_hdrs}
+EXPORT_LIBS = $(PROJ_LIB) $(PROJ_DLL)
+
+check::

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,82 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 1735 2004-07-26 00:19:55Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_lib = StGermainBaseAutomation
+def_inc = StGermain/Base/Automation
+
+def_srcs = \
+	Variable.c \
+	Variable_Register.c \
+	VariableDumpStream.c \
+	ConditionFunction.c \
+	ConditionFunction_Register.c \
+	VariableCondition.c \
+	VariableCondition_Register.c \
+	CompositeVC.c \
+	SetVC.c \
+	VariableAllVC.c \
+	Stg_Component.c \
+	Stg_ComponentMeta.c \
+	Stg_ComponentRegister.c \
+	LiveComponentRegister.c \
+	Stg_ComponentFactory.c \
+	DocumentationComponentFactory.c \
+	HierarchyTable.c \
+	CallGraph.c \
+	Init.c \
+	Finalise.c
+
+def_hdrs = \
+	Variable.h \
+	Variable_Register.h \
+	VariableDumpStream.h \
+	ConditionFunction.h \
+	ConditionFunction_Register.h \
+	VariableCondition.h \
+	VariableCondition_Register.h \
+	CompositeVC.h \
+	SetVC.h \
+	VariableAllVC.h \
+	types.h \
+	shortcuts.h \
+	offsets.h \
+	Stg_Component.h \
+	Stg_ComponentMeta.h \
+	Stg_ComponentRegister.h \
+	LiveComponentRegister.h \
+	Stg_ComponentFactory.h \
+	DocumentationComponentFactory.h \
+	HierarchyTable.h \
+	CallGraph.h \
+	Init.h \
+	Finalise.h \
+	Automation.h
+
+def_objlists =

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,161 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: VariableDumpStream.c 789 2004-02-10 17:15:11Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+                                                                                                                                    
+#include "types.h"
+#include "RegisterFactory.h"
+
+#include <assert.h>
+
+const Type RegisterFactory_Type = "RegisterFactory";
+const Type RegisterFactory_RegisterConstructorFunction_Type = "RegisterFactory_RegisterConstructorFunction";
+
+RegisterFactory_RegisterConstructor* RegisterFactory_RegisterConstructor_New(
+	Name						name,
+	RegisterFactory_RegisterConstructorFunction*	_constructor )
+{
+	return _RegisterFactory_RegisterConstructor_New(
+		sizeof(RegisterFactory_RegisterConstructor),
+		RegisterFactory_RegisterConstructorFunction_Type,
+		_Stg_Object_Delete,
+		_Stg_Object_Print,
+		NULL, 
+		name,
+		NON_GLOBAL,
+		_constructor );
+}
+
+RegisterFactory_RegisterConstructor* _RegisterFactory_RegisterConstructor_New(
+	SizeT						_sizeOfSelf,
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy, 
+	Name						name,
+	AllocationType					nameAllocationType,
+	RegisterFactory_RegisterConstructorFunction*	_constructor )
+{
+	RegisterFactory_RegisterConstructor* self;
+
+	assert( _sizeOfSelf >= sizeof(RegisterFactory_RegisterConstructor) );
+
+	self = (RegisterFactory_RegisterConstructor*)_Stg_Object_New(
+		_sizeOfSelf,
+		type,
+		_delete,
+		_print,
+		_copy, 
+		name,
+		nameAllocationType );
+	
+	self->_constructor = _constructor;
+
+	return self;
+}
+
+RegisterFactory* RegisterFactory_New()
+{
+	return _RegisterFactory_New(
+		sizeof(RegisterFactory),
+		RegisterFactory_Type,
+		_RegisterFactory_Delete,
+		_RegisterFactory_Print,
+		NULL );
+}
+
+RegisterFactory* _RegisterFactory_New(
+	SizeT						_sizeOfSelf,
+	Type						type,
+	Stg_Class_DeleteFunction*				_delete,
+	Stg_Class_PrintFunction*				_print,
+	Stg_Class_CopyFunction*				_copy )
+{
+	RegisterFactory* self;
+
+	assert ( _sizeOfSelf >= sizeof(RegisterFactory) );
+
+	self = (RegisterFactory*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+
+	_RegisterFactory_Init( self );
+
+	return self;
+}
+
+void _RegisterFactory_Init( RegisterFactory* self ) {
+	self->constructors = Stg_ObjectList_New();
+}
+
+void _RegisterFactory_Delete( void* factory ) {
+	RegisterFactory* self = (RegisterFactory*)factory;
+
+	Stg_ObjectList_DeleteAllObjects( self->constructors );
+	Stg_Class_Delete( self->constructors );
+	_Stg_Class_Delete( self );
+}
+
+void _RegisterFactory_Print( void* factory, Stream* stream ) {
+	RegisterFactory* self = (RegisterFactory*)factory;
+	
+	Journal_Printf( stream, "RegisterFactory\n" );
+	_Stg_Class_Print( self, stream );
+	Print( self->constructors, stream );
+}
+
+void RegisterFactory_Register( void* factory, Name name, void* _constructorFunction )
+{
+	RegisterFactory* self = (RegisterFactory*)factory;
+	
+	Stg_ObjectList_Append( self->constructors,
+		RegisterFactory_RegisterConstructor_New(
+			name,
+			(RegisterFactory_RegisterConstructorFunction*)_constructorFunction ) );
+}
+
+void* RegisterFactory_Create( void* factory, Name name )
+{
+	RegisterFactory* self = (RegisterFactory*)factory;
+	RegisterFactory_RegisterConstructor* constructor;
+	RegisterFactory_RegisterConstructorFunction* constructorFunc;
+	
+
+	constructor = (RegisterFactory_RegisterConstructor*)Stg_ObjectList_Get( self->constructors, name );
+	constructorFunc = (RegisterFactory_RegisterConstructorFunction*)constructor->_constructor;
+
+	return (constructorFunc)();
+}
+
+
+
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/RegisterFactory.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,110 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**
+**
+** <b>Assumptions</b>
+**	None
+**
+** <b>Comments</b>
+**	None
+**
+** <b>Description</b>
+**
+**
+** Comments:
+**
+** $Id: RegisterFactory.h 789 2004-02-10 17:15:11Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_IO_RegisterFactory_h__
+#define __Base_IO_RegisterFactory_h__
+	
+	/** Textual name for RegisterFactory class. */
+	extern const Type RegisterFactory_Type;
+	
+	/** Textual name for RegisterFactory_RegisterConstructorFunction class. */
+	extern const Type RegisterFactory_RegisterConstructorFunction_Type;
+	
+	typedef void* (RegisterFactory_RegisterConstructorFunction) ( );
+
+	/** \def __RegisterFactory_RegisterConstructor See RegisterFactory_RegisterConstructor */
+	#define __RegisterFactory_RegisterConstructor \
+		__Stg_Object \
+		RegisterFactory_RegisterConstructorFunction*	_constructor;
+		
+	struct RegisterFactory_RegisterConstructor { __RegisterFactory_RegisterConstructor };
+
+	RegisterFactory_RegisterConstructor* RegisterFactory_RegisterConstructor_New(
+		Name						name,
+		RegisterFactory_RegisterConstructorFunction*	_constructor );
+
+	RegisterFactory_RegisterConstructor* _RegisterFactory_RegisterConstructor_New(
+		SizeT						_sizeOfSelf,
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Name						name,
+		AllocationType					nameAllocationType,
+		RegisterFactory_RegisterConstructorFunction*	_constructor );
+
+	/** \def __RegisterFactory See RegisterFactory. */
+	#define __RegisterFactory \
+		/* General info */ \
+		__Stg_Class \
+		\
+		Stg_ObjectList*	constructors;
+		
+	struct RegisterFactory { __RegisterFactory };
+
+	RegisterFactory* RegisterFactory_New();
+
+	RegisterFactory* _RegisterFactory_New(
+		SizeT						_sizeOfSelf,
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy );
+	
+	void _RegisterFactory_Init( RegisterFactory* self );
+
+	void _RegisterFactory_Delete( void* factory );
+
+	void _RegisterFactory_Print( void* factory, Stream* stream );
+
+	void RegisterFactory_Register( void* factory, Name name, void* _constructorFunction );
+
+	void* RegisterFactory_Create( void* factory, Name name );
+
+	
+#endif /* __IO_RegisterFactoryFile_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,567 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: SetVC.c 3881 2006-10-26 03:14:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+#include "ConditionFunction.h"
+#include "ConditionFunction_Register.h"
+#include "VariableCondition.h"
+#include "SetVC.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type SetVC_Type = "SetVC";
+const Name defaultSetVCName = "defaultSetVCName";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* SetVC_Factory(
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register, 
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return (VariableCondition*)SetVC_New( defaultSetVCName, NULL, variable_Register, conFunc_Register, dictionary );
+}
+
+
+SetVC*	SetVC_New(
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary )
+{
+	return _SetVC_New( 
+		sizeof(SetVC), 
+		SetVC_Type, 
+		_SetVC_Delete, 
+		_SetVC_Print, 
+		_SetVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)SetVC_DefaultNew,
+		_VariableCondition_Construct,
+		_VariableCondition_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+	   True,	
+		NULL,
+		_SetVC_PrintConcise,
+		_SetVC_ReadDictionary,
+		_SetVC_GetSet, 
+		_SetVC_GetVariableCount, 
+		_SetVC_GetVariableIndex, 
+		_SetVC_GetValueIndex, 
+		_SetVC_GetValueCount, 
+		_SetVC_GetValue,
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+}
+
+SetVC* SetVC_DefaultNew( Name name )
+{
+	return (SetVC*)_SetVC_New( 
+		sizeof(SetVC), 
+		SetVC_Type, 
+		_SetVC_Delete, 
+		_SetVC_Print, 
+		_SetVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)SetVC_DefaultNew,
+		_VariableCondition_Construct,
+		_VariableCondition_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name, 
+		False,
+		NULL,
+		_SetVC_PrintConcise,
+		_SetVC_ReadDictionary,
+		_SetVC_GetSet, 
+		_SetVC_GetVariableCount, 
+		_SetVC_GetVariableIndex, 
+		_SetVC_GetValueIndex, 
+		_SetVC_GetValueCount, 
+		_SetVC_GetValue,
+		NULL,
+		NULL/*variable_Register*/, 
+		NULL/*conFunc_Register*/,
+		NULL/*dictionary*/ );
+}
+
+void SetVC_Init(
+		SetVC*						self,
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary )
+{
+	/* General info */
+	self->type = SetVC_Type;
+	self->_sizeOfSelf = sizeof(SetVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _SetVC_Delete;
+	self->_print = _SetVC_Print;
+	self->_copy = _SetVC_Copy;
+	self->_build = _VariableCondition_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_buildSelf = NULL;
+	self->_printConcise = _SetVC_PrintConcise;
+	self->_readDictionary = _SetVC_ReadDictionary;
+	self->_getSet = _SetVC_GetSet;
+	self->_getVariableCount = _SetVC_GetVariableCount;
+	self->_getVariableIndex = _SetVC_GetVariableIndex;
+	self->_getValueIndex = _SetVC_GetValueIndex;
+	self->_getValueCount = _SetVC_GetValueCount;
+	self->_getValue = _SetVC_GetValue;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+	
+	/* Stg_Class info */
+	_SetVC_Init( self,  _dictionaryEntryName );
+}
+
+
+SetVC* _SetVC_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*		_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*			_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name							name,
+		Bool							initFlag,
+		VariableCondition_BuildSelfFunc*		_buildSelf, 
+		VariableCondition_PrintConciseFunc*		_printConcise,
+		VariableCondition_ReadDictionaryFunc*		_readDictionary,
+		VariableCondition_GetSetFunc*			_getSet,
+		VariableCondition_GetVariableCountFunc*		_getVariableCount,
+		VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+		VariableCondition_GetValueIndexFunc*		_getValueIndex,
+		VariableCondition_GetValueCountFunc*		_getValueCount,
+		VariableCondition_GetValueFunc*			_getValue,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary )
+{
+	SetVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(SetVC));
+	self = (SetVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print, 
+		_copy, 
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue,
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_SetVC_Init( self, _dictionaryEntryName );
+	}
+	
+	return self;
+}
+
+void _SetVC_Init( void* setVC, Name _dictionaryEntryName ) {
+	SetVC*			self = (SetVC*)setVC;
+	
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+}	
+	
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _SetVC_ReadDictionary( void* setVC, void* dictionary ) {
+	SetVC*			self = (SetVC*)setVC;
+	Dictionary_Entry_Value*	vcDictVal;
+	Dictionary_Entry_Value	_vcDictVal;
+	Dictionary_Entry_Value*	varsVal;
+	SetVC_Entry_Index	entry_I;
+	
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get( dictionary, self->_dictionaryEntryName );
+	else
+	{
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct( vcDictVal, dictionary );
+	}
+	
+	if (vcDictVal)
+	{
+		Dictionary_Entry_Value*		setVal = Dictionary_Entry_Value_GetMember( vcDictVal, "indices" );
+		Index				indexCnt = Dictionary_Entry_Value_AsUnsignedInt( 
+							Dictionary_Entry_Value_GetMember( vcDictVal, "indexCount" ) );
+		Index				i, cnt;
+		
+		self->_vcset = IndexSet_New( indexCnt );
+		cnt = Dictionary_Entry_Value_GetCount( setVal );
+		for( i = 0; i < cnt; i++ )
+			IndexSet_Add( self->_vcset, Dictionary_Entry_Value_AsUnsignedInt( 
+				Dictionary_Entry_Value_GetElement( setVal, i ) ) );
+		
+		/* Obtain the variable entries */
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		self->_entryCount = Dictionary_Entry_Value_GetCount( varsVal );
+		self->_entryTbl = Memory_Alloc_Array( SetVC_Entry, self->_entryCount, "SetVC->_entryTbl");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (!strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				self->_entryTbl[entry_I].value.as.typeCFIndex = ConditionFunction_Register_GetIndex(
+					self->conFunc_Register, funcName);
+			}
+			else if (!strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+					self->_entryTbl[entry_I].value.as.typeArray.size, "SetVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( !strcasecmp( valType, "double" ) || !strcasecmp( valType, "d" ) || !strcasecmp( valType, "float" ) || !strcasecmp( valType, "f" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( !strcasecmp( valType, "integer" ) || !strcasecmp( valType, "int" ) || !strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "short" ) || !strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "char" ) || !strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "pointer" ) || !strcasecmp( valType, "ptr" ) || !strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*) ((ArithPointer) Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_DPrintf( 
+					Journal_Register( InfoStream_Type, "myStream" ), 
+					"Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+void _SetVC_Delete(void* setVC)
+{
+	SetVC*	self = (SetVC*)setVC;
+	
+	if (self->_entryTbl) Memory_Free( self->_entryTbl );
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _SetVC_Print(void* setVC, Stream* stream)
+{
+	SetVC*				self = (SetVC*)setVC;
+	SetVC_Entry_Index		entry_I;
+	Index				i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "SetVC (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( info, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	Journal_Printf( info, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( info, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if (self->_entryTbl)
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			Journal_Printf( info, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( info, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( info, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( info, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type)
+			{
+				case VC_ValueType_Double:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Double\n" );
+					Journal_Printf( info, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+					break;
+					
+				case VC_ValueType_Int:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Int\n" );
+					Journal_Printf( info, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+					break;
+					
+				case VC_ValueType_Short:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Short\n" );
+					Journal_Printf( info, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+					break;
+					
+				case VC_ValueType_Char:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Char\n");
+					Journal_Printf( info, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+					break;
+					
+				case VC_ValueType_Ptr:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+					Journal_Printf( info, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+					break;
+					
+				case VC_ValueType_DoubleArray:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+					Journal_Printf( info, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+					Journal_Printf( info, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+					if (self->_entryTbl[entry_I].value.as.typeArray.array)
+						for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+							Journal_Printf( info, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->_entryTbl[entry_I].value.as.typeArray.array[i]);
+					break;
+					
+				case VC_ValueType_CFIndex:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+					Journal_Printf( info, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+					break;
+			}
+		}
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+}
+
+
+void* _SetVC_Copy( void* setVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	SetVC*		self = (SetVC*)setVC;
+	SetVC*		newSetVC;
+	PtrMap*		map = ptrMap;
+	Bool		ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newSetVC = (SetVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newSetVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newSetVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newSetVC->_vcset = (IndexSet*)Stg_Class_Copy( self->_vcset, NULL, deep, nameExt, map );
+		
+		if( (newSetVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newSetVC->_entryTbl = Memory_Alloc_Array( SetVC_Entry, newSetVC->_entryCount, "SetVC->_entryTbl");
+			memcpy( newSetVC->_entryTbl, self->_entryTbl, sizeof(SetVC_Entry) * newSetVC->_entryCount );
+			PtrMap_Append( map, newSetVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newSetVC->_vcset = self->_vcset;
+		newSetVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newSetVC;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+IndexSet* _SetVC_GetSet( void* variableCondition ) {
+	SetVC*		self = (SetVC*)variableCondition;
+	
+	return (IndexSet*) IndexSet_Duplicate( self->_vcset );
+}
+
+
+VariableCondition_VariableIndex _SetVC_GetVariableCount( void* variableCondition, Index globalIndex ) {
+	SetVC*	self = (SetVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _SetVC_GetVariableIndex( void* variableCondition, Index globalIndex, VariableCondition_VariableIndex varIndex ) {
+	SetVC*	self = (SetVC*)variableCondition;
+	
+	return Variable_Register_GetIndex(self->variable_Register, self->_entryTbl[varIndex].varName);
+}
+
+
+VariableCondition_ValueIndex _SetVC_GetValueIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex )
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _SetVC_GetValueCount( void* variableCondition ) {
+	SetVC*	self = (SetVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _SetVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex ) {
+	SetVC*	self = (SetVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+
+void _SetVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	SetVC*		self = (SetVC*)variableCondition;
+	IndexSet_Index	set_I;
+	
+	Journal_Printf( stream, "\ttype: %s, set: {", self->type );
+	for( set_I = 0; set_I < self->_set->size; set_I++ ) {
+		if( IndexSet_IsMember( self->_set, set_I ) ) {
+			Journal_Printf( stream, "%u ", set_I );
+		}
+	}
+	Journal_Printf( stream, "}\n" );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,182 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: SetVC.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_SetVC_h__
+#define __Base_Automation_SetVC_h__
+	
+
+	extern const Type SetVC_Type;
+	
+	
+	#define __SetVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _SetVC_Entry { __SetVC_Entry };
+	
+	
+	#define __SetVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		SetVC_Entry_Index		_entryCount; \
+		SetVC_Entry*			_entryTbl; \
+		IndexSet*			_vcset;
+
+	struct _SetVC { __SetVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		SetVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	SetVC*				SetVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	SetVC*				SetVC_DefaultNew( Name name );
+	
+	void				SetVC_Init(
+						SetVC*						self,
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	SetVC*				_SetVC_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*				_delete,
+						Stg_Class_PrintFunction*				_print,
+						Stg_Class_CopyFunction*				_copy, 
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*		_construct,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*			_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*		_destroy,
+						Name							name,
+						Bool							initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc*		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	void				_SetVC_Init( void* setVC, Name _dictionaryEntryName );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_SetVC_Delete( void* setVC );
+	
+	void				_SetVC_Print( void* setVC, Stream* stream );
+	
+	/* Copy */
+	#define SetVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define SetVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _SetVC_Copy( void* setVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_SetVC_ReadDictionary( void* setVC, void* dictionary );
+	
+	IndexSet*			_SetVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_SetVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_SetVC_GetVariableIndex(
+						void*				variableCondition,
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex);
+						
+	VariableCondition_ValueIndex	_SetVC_GetValueIndex(
+						void*				variableCondition, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex);
+						
+	VariableCondition_ValueIndex	_SetVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_SetVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_SetVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Base_Automation_SetVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/SetVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">SetVC</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,635 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Stg_Component.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentMeta.h"
+#include "Stg_ComponentFactory.h"
+#include "LiveComponentRegister.h"
+#include "CallGraph.h"
+
+#include "Stg_ComponentRegister.h"
+
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+
+/* Textual name of this class */
+const Type Stg_Component_Type = "Stg_Component";
+
+
+Stg_Component* _Stg_Component_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*		_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*			_destroy,
+		Name						name,
+		AllocationType					nameAllocationType )
+{
+	Stg_Component* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stg_Component) );
+	self = (Stg_Component*)_Stg_Object_New( _sizeOfSelf, type, _delete, _print, _copy, name, nameAllocationType );
+	
+	/* General info */
+	
+	/* Virtual functions */
+	self->_defaultConstructor = _defaultConstructor;
+	self->_construct = _construct;
+	self->_build = _build;
+	self->_initialise =  _initialise;
+	self->_execute = _execute;
+	self->_destroy = _destroy;
+	
+	/* Stg_Component info */
+	_Stg_Component_Init( self );
+	
+	return self;
+}
+
+
+void _Stg_Component_Init( Stg_Component* self ) {
+	/* General and Virtual info should already be set */
+	
+	/* Stg_Component info */
+	self->isConstructed = False;
+	self->isBuilt = False;
+	self->isInitialised = False;
+	self->hasExecuted = False;
+	self->isDestroyed = False;
+	self->constructType = Stg_Object_AppendSuffix( self, "Construct" );
+	self->buildType = Stg_Object_AppendSuffix( self, "Build" );
+	self->initialiseType = Stg_Object_AppendSuffix( self, "Initialise" );
+	self->executeType = Stg_Object_AppendSuffix( self, "Execute" );
+	self->destroyType = Stg_Object_AppendSuffix( self, "Destroy" );
+}
+
+
+void _Stg_Component_Delete( void* component ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	Memory_Free( self->destroyType );
+	Memory_Free( self->executeType );
+	Memory_Free( self->initialiseType );
+	Memory_Free( self->buildType );
+	Memory_Free( self->constructType );
+	
+	/* Stg_Class_Delete parent class */
+	_Stg_Object_Delete( self );
+}
+
+
+void _Stg_Component_Print( void* component, Stream* stream ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Stg_Component (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_Object_Print( self, stream );
+	
+	/* Virtual info */
+	Journal_Printf( (void*) stream, "\t_defaultConstructor (func ptr): %p\n", self->_defaultConstructor );
+	Journal_Printf( (void*) stream, "\t_construct (func ptr): %p\n", self->_construct );
+	Journal_Printf( (void*) stream, "\t_build (func ptr): %p\n", self->_build );
+	Journal_Printf( (void*) stream, "\t_initialise (func ptr): %p\n", self->_initialise );
+	Journal_Printf( (void*) stream, "\t_execute (func ptr): %p\n", self->_execute );
+	Journal_Printf( (void*) stream, "\t_destroy (func ptr): %p\n", self->_destroy );
+	
+	/* Stg_Component */
+	Journal_Printf( (void*) stream, "\tisConstructed: %s\n", self->isConstructed ? "True" : "False" );
+	Journal_Printf( (void*) stream, "\tisBuilt: %s\n", self->isBuilt ? "True" : "False" );
+	Journal_Printf( (void*) stream, "\tisInitialised: %s\n", self->isInitialised ? "True" : "False" );
+	Journal_Printf( (void*) stream, "\thasExecuted: %s\n", self->hasExecuted ? "True" : "False" );
+	Journal_Printf( (void*) stream, "\tisDestroyed: %s\n", self->isDestroyed ? "True" : "False" );
+
+	Journal_Printf( (void*) stream, "\tconstructor function name: %s\n", self->constructType );
+	Journal_Printf( (void*) stream, "\tbuild function name: %s\n", self->buildType );
+	Journal_Printf( (void*) stream, "\tinitialise function name: %s\n", self->initialiseType );
+	Journal_Printf( (void*) stream, "\texecute function name: %s\n", self->executeType );
+	Journal_Printf( (void*) stream, "\tdestroy function name: %s\n", self->destroyType );
+}
+
+void* _Stg_Component_Copy( void* component, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	Stg_Component*	self = (Stg_Component*)component;
+	Stg_Component*	newComponent;
+	
+	newComponent = _Stg_Object_Copy( component, dest, deep, nameExt, ptrMap );
+	
+	/* Virtual methods */
+	newComponent->_defaultConstructor = self->_defaultConstructor;
+	newComponent->_construct = self->_construct;
+	newComponent->_build = self->_build;
+	newComponent->_initialise = self->_initialise;
+	newComponent->_execute = self->_execute;
+	newComponent->_destroy = self->_destroy;
+	
+	newComponent->isConstructed = self->isConstructed;
+	newComponent->isBuilt = self->isBuilt;
+	newComponent->isInitialised = self->isInitialised;
+	newComponent->hasExecuted = self->hasExecuted;
+	newComponent->isDestroyed = self->isDestroyed;
+	
+	newComponent->constructType = StG_Strdup( self->constructType );
+	newComponent->buildType = StG_Strdup( self->buildType );
+	newComponent->initialiseType = StG_Strdup( self->initialiseType );
+	newComponent->executeType = StG_Strdup( self->executeType );
+	newComponent->destroyType = StG_Strdup( self->destroyType );
+
+	if ( LiveComponentRegister_GetLiveComponentRegister() ) {
+		LiveComponentRegister_Add( LiveComponentRegister_GetLiveComponentRegister(), newComponent );
+		Memory_CountInc( newComponent );	/* Live register now has a refernce to it */
+	}
+
+	return newComponent;
+}
+
+void Stg_Component_Construct( void* component, Stg_ComponentFactory* cf, void* data, Bool force ) {
+	Stg_Component* self   = (Stg_Component*)component;
+
+	assert( self );
+	
+	if( force || !self->isConstructed ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;*/
+		
+		Stream* stream = Journal_Register( Info_Type, "Stg_ComponentFactory" );
+
+		Journal_Printf( stream, "Constructing %s..\n", self->name );
+		Stream_Indent( stream );
+		
+		/*buf = Stg_Object_AppendSuffix( self, "Construct" );
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_construct, self->constructType );
+		#endif
+		
+		if ( !self->isConstructed ) {
+			Stg_Component_SetupStreamFromDictionary( 
+				self, 
+				Dictionary_GetDictionary( cf->componentDict, self->name ) );
+		}
+		
+		self->isConstructed = True;
+		self->_construct( self, cf, data );
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );
+
+		Memory_Free( buf );*/
+		
+		Stream_UnIndent( stream );
+	}
+}
+
+void Stg_Component_Build( void* component, void* data, Bool force ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	if( force || !self->isBuilt ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;
+		
+		buf = Stg_Object_AppendSuffix( self, "Build" );
+		
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_build, self->buildType );
+		#endif
+		
+		self->_build( self, data );
+		self->isBuilt = True;
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );
+
+		Memory_Free( buf );*/
+	}
+}
+
+void Stg_Component_Initialise( void* component, void* data, Bool force ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	if( force || !self->isInitialised ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;
+		
+		buf = Stg_Object_AppendSuffix( self, "Initialise" );
+		
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_initialise, self->initialiseType );
+		#endif
+		
+		self->_initialise( self, data );
+		self->isInitialised = True;
+		
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );
+		
+		Memory_Free( buf );*/
+	}
+}
+
+void Stg_Component_Execute( void* component, void* data, Bool force ) {
+	Stg_Component* self = (Stg_Component*)component;
+	if( force || !self->hasExecuted ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;
+		
+		buf = Stg_Object_AppendSuffix( self, "Execute" );
+		
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_execute, self->executeType );
+		#endif
+		
+		self->_execute( self, data );
+		self->hasExecuted = True;
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );	
+		
+		Memory_Free( buf );*/
+	}
+}
+
+void Stg_Component_Destroy( void* component, void* data, Bool force ) {
+	Stg_Component* self = (Stg_Component*)component;
+	if( force || !self->isDestroyed ) {
+		/*Stg_TimeMonitor* tm;
+		Stg_MemMonitor*  mm;
+		char*            buf;
+		
+		buf = Stg_Object_AppendSuffix( self, "Destroy" );
+		
+		tm = Stg_TimeMonitor_New( buf, True, True, MPI_COMM_WORLD );
+		mm = Stg_MemMonitor_New( buf, True, True, MPI_COMM_WORLD );
+	
+		Stg_MemMonitor_Begin( mm );
+		Stg_TimeMonitor_Begin( tm );*/
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Push( stgCallGraph, self->_destroy, self->destroyType );
+		#endif
+		
+		self->_destroy( self, data );
+		self->isDestroyed = True;
+		
+		#ifdef USE_PROFILE
+			Stg_CallGraph_Pop( stgCallGraph );
+		#endif
+		
+		/*Stg_TimeMonitor_End( tm );
+		Stg_MemMonitor_End( mm );
+	
+		Stg_TimeMonitor_Delete( tm );
+		Stg_MemMonitor_Delete( mm );
+		Memory_Free( buf );*/
+	}
+}
+
+
+/* TODO: UPT TO HERE */
+
+Bool Stg_Component_IsBuiltFunc( void* component ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	return Stg_Component_IsBuiltMacro( self );
+}
+
+Bool Stg_Component_IsInitialisedFunc( void* component ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	return Stg_Component_IsInitialisedMacro( self );
+}
+
+Bool Stg_Component_HasExecutedFunc( void* component ) {
+	Stg_Component* self = (Stg_Component*)component;
+	
+	return Stg_Component_HasExecutedMacro( self );
+}
+
+void Stg_Component_SetupStreamFromDictionary( void* component, Dictionary* dictionary ) {
+	Stg_Component* self = (Stg_Component*)component;
+
+	Index index;
+	Bool valid;
+
+	char* keyCopy;
+	char* operation;
+	char* streamType;
+
+	Stream* stream;
+
+	if ( dictionary == NULL ) {
+		return;
+	}
+	
+	/* Iterate through the whole dictionary, checking for journal related commands */
+	for ( index = 0; index < dictionary->count; ++index ) {
+		/* Check to see if it is a journal operation by searching for the JOURNAL_KEY. */
+		if ( (strncasecmp( dictionary->entryPtr[index]->key, JOURNAL_KEY, strlen(JOURNAL_KEY))) == 0 ) {
+			
+			keyCopy = StG_Strdup( dictionary->entryPtr[index]->key );
+
+			operation = strtok( keyCopy, JOURNAL_DELIMITER );
+			streamType = strtok( NULL, JOURNAL_DELIMITER );
+
+			if ( streamType == NULL ) {
+				streamType = Info_Type;
+			}
+
+			stream = Journal_MyStream( streamType, self );
+
+			valid = True;
+			if ( strcmp( operation, JOURNAL_ENABLE_KEY ) == 0 ) {
+				Bool enable = Dictionary_Entry_Value_AsBool( dictionary->entryPtr[index]->value );
+				Stream_Enable( stream, enable );
+			}
+			else if ( strcmp( operation, JOURNAL_ENABLE_BRANCH_KEY ) == 0 ) {
+				Bool enable = Dictionary_Entry_Value_AsBool( dictionary->entryPtr[index]->value );
+				Stream_EnableBranch( stream, enable );
+			}
+			else if ( strcmp( operation, JOURNAL_LEVEL_KEY ) == 0 ) {
+				JournalLevel level = Dictionary_Entry_Value_AsUnsignedInt( dictionary->entryPtr[index]->value );
+				Stream_SetLevelBranch( stream, level );
+			}
+			else if ( strcmp( operation, JOURNAL_RANK_KEY ) == 0 ) {
+				int rank = Dictionary_Entry_Value_AsUnsignedInt( dictionary->entryPtr[index]->value );
+				Stream_SetPrintingRank( stream, rank );
+			}
+			else if ( strcmp( operation, JOURNAL_FLUSH_KEY ) == 0 ) {
+				Bool flush = Dictionary_Entry_Value_AsBool( dictionary->entryPtr[index]->value );
+				Stream_SetAutoFlush( stream, flush );
+			}
+			else {
+				valid = False;
+			}
+
+			if ( !valid ) {
+				Journal_Printf(
+					Journal_Register( Info_Type, "Journal" ),
+					"Warning - unknown journal operation %s for component %s\n",
+					dictionary->entryPtr[index]->key,
+					self->name );
+			}
+						
+			Memory_Free( keyCopy );
+		}
+	}
+											
+}
+
+Stg_ComponentMeta* _Stg_Component_CreateMeta( Name name, Type type ) {
+	Stg_ComponentMeta* meta;
+	const char* metadata;
+	Dictionary* metaDict;
+	XML_IO_Handler* ioHandler;
+
+	Dictionary_Entry_Value* depList;
+	Dictionary_Entry_Value* paramList;
+
+	metadata = Stg_ComponentRegister_GetMetadata( Stg_ComponentRegister_Get_ComponentRegister(), type, "0" )();
+	
+	metaDict = Dictionary_New();
+	
+	ioHandler = XML_IO_Handler_New();
+	IO_Handler_ReadAllFromBuffer( ioHandler, metadata, metaDict );
+	
+	meta = Stg_ComponentMeta_New( name, type );
+
+	meta->ioHandler = ioHandler;
+	meta->dict = metaDict;
+	meta->type = type;
+	meta->project = Dictionary_GetString( metaDict, "Project" );
+	meta->location = Dictionary_GetString( metaDict, "Location" );
+	meta->web = Dictionary_GetString( metaDict, "Project Web" );
+	meta->copyright = Dictionary_GetString( metaDict, "Copyright" );
+	meta->license = Dictionary_GetString( metaDict, "License" );
+	meta->parent = Dictionary_GetString( metaDict, "Parent" );
+	meta->description = Dictionary_GetString( metaDict, "Description" );
+
+	depList = Dictionary_Get( metaDict, "Dependencies" );
+	if ( depList != NULL ) {
+		Dictionary_Entry_Value* current = Dictionary_Entry_Value_GetFirstElement( depList );
+
+		while ( current != NULL ) {
+			char* depName;
+			char* depType;
+			char* depDescription;
+			Bool essential;
+			Dictionary* depDict = Dictionary_Entry_Value_AsDictionary( current );
+
+			depName = Dictionary_GetString( depDict, "Name" );
+			depType = Dictionary_GetString( depDict, "Type" );
+			depDescription = Dictionary_GetString( depDict, "Description" );
+			essential = Dictionary_GetBool( depDict, "Essential" );
+
+			Stg_ObjectList_Append( 
+					meta->allDependencies, 
+					Stg_ComponentMeta_Value_New( depName, depType, depDescription, NULL ) );
+			if ( essential ) {
+				Stg_ObjectList_Append(
+					meta->essentialDependencies,
+					Stg_ComponentMeta_Value_New( depName, depType, depDescription, NULL ) );
+			}
+			else {
+				Stg_ObjectList_Append( 
+					meta->optionalDependencies,
+					Stg_ComponentMeta_Value_New( depName, depType, depDescription, NULL ) );
+			}
+
+			current = current->next;
+		}
+	}
+
+	paramList = Dictionary_Get( metaDict, "Params" );
+	if ( paramList != NULL ) {
+		Dictionary_Entry_Value* current = Dictionary_Entry_Value_GetFirstElement( paramList );
+
+		while ( current != NULL ) {
+			char* paramName;
+			char* paramType;
+			char* paramDescription;
+			char* paramDefault;
+
+			Dictionary* paramDict = Dictionary_Entry_Value_AsDictionary( Dictionary_Entry_Value_GetFirstElement( current ) );
+
+			paramName = Dictionary_GetString( paramDict, "Name" );
+			paramType = Dictionary_GetString( paramDict, "Type" );
+			paramDescription = Dictionary_GetString( paramDict, "Description" );
+			paramDefault = Dictionary_GetString( paramDict, "Default" );
+
+			Stg_ObjectList_Append( meta->allParams,
+					Stg_ComponentMeta_Value_New( paramName, paramType, paramDescription, paramDefault ) );
+
+			current = current->next;
+		}
+
+	}
+
+	return meta;
+}
+
+Stg_ComponentMeta* _Stg_Component_Validate( void* component, Type type, Dictionary* componentDictionary ) {
+	Stg_Component* self = (Stg_Component*)component;
+
+	const char* metadata;
+	
+	Dictionary* dictionary;
+
+	Stg_ComponentMeta* result;
+	int entry_I;
+	int obj_I;
+
+	metadata = Stg_ComponentRegister_GetMetadata( Stg_ComponentRegister_Get_ComponentRegister(), type, "0" )();
+
+	dictionary = Dictionary_GetDictionary( componentDictionary, self->name );
+
+	result = _Stg_Component_CreateMeta( self->name, self->type );
+
+	for ( entry_I = 0; entry_I < dictionary->count; ++entry_I ) {
+		Stg_ComponentMeta_Value* obj;
+		char* key;
+		Dictionary_Entry_Value* value;
+		key = dictionary->entryPtr[entry_I]->key;
+		value = Dictionary_GetByIndex( dictionary, entry_I );
+
+		/* Type special case */
+		if ( strcmp( key, "Type" ) == 0 ) {
+			continue;
+		}
+		
+		obj = (Stg_ComponentMeta_Value*)Stg_ObjectList_Get( result->allParams, key );
+		if ( obj != NULL ) {
+			obj->haveValue = True;
+			continue;
+		}
+
+		if ( (Stg_ComponentMeta_Value*)Stg_ObjectList_Get( result->allDependencies, key ) == NULL ) {
+			Stg_ObjectList_Append( 
+					result->unexpectedDependencies, 
+					Stg_ComponentMeta_Value_New( key, NULL, NULL, NULL ) );
+		}
+
+		obj = (Stg_ComponentMeta_Value*)Stg_ObjectList_Get( result->essentialDependencies, key );
+		if ( obj != NULL ) {
+			/* can do subtype checking here */
+			obj->haveValue = True;
+		}
+		obj = (Stg_ComponentMeta_Value*)Stg_ObjectList_Get( result->optionalDependencies, key );
+		if ( obj != NULL ) {
+			/* can do subtype checking here */
+			obj->haveValue = True;
+		}
+	}
+
+	for ( obj_I = 0; obj_I < result->essentialDependencies->count; ++obj_I ) {
+		Stg_ComponentMeta_Value* metaValue;
+		metaValue = (Stg_ComponentMeta_Value*)Stg_ObjectList_At( result->essentialDependencies, obj_I );
+		if ( metaValue->haveValue == False ) {
+			Stg_ObjectList_Append( 
+					result->missingDependencies,
+					Stg_ComponentMeta_Value_New( metaValue->name, metaValue->type, metaValue->description, metaValue->defaultValue ) );
+			result->isValid = False;
+		}
+	}
+
+	return result;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,227 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class for objects that are named.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_Component.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Stg_Component_h__
+#define __Base_Automation_Stg_Component_h__
+	
+	/* Templates of virtual functions */
+	typedef void*				(Stg_Component_DefaultConstructorFunction)	( Name name );
+	typedef void				(Stg_Component_ConstructFunction)		( void* component, 
+												  Stg_ComponentFactory* cf,
+												  void* data );
+	typedef void				(Stg_Component_BuildFunction)			( void* component, void* data );
+	typedef void				(Stg_Component_InitialiseFunction)		( void* component, void* data );
+	typedef void				(Stg_Component_ExecuteFunction)			( void* component, void* data );
+	typedef void				(Stg_Component_DestroyFunction)			( void* component, void* data );
+	
+	/* Textual name of this class */
+	extern const Type Stg_Component_Type;
+	
+	
+	/* Stg_Component information */
+	#define __Stg_Component \
+		/* General info */ \
+		__Stg_Object \
+		\
+		/* Virtual info */ \
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor; \
+		Stg_Component_ConstructFunction*		_construct; \
+		Stg_Component_BuildFunction*			_build; \
+		Stg_Component_InitialiseFunction*		_initialise; \
+		Stg_Component_ExecuteFunction*			_execute; \
+		Stg_Component_DestroyFunction*			_destroy; \
+		\
+		/* Stg_Component info */ \
+		Bool					isConstructed; \
+		Bool					isBuilt; \
+		Bool					isInitialised; \
+		Bool					hasExecuted; \
+		Bool					isDestroyed; \
+		Type					constructType; \
+		Type					buildType; \
+		Type					initialiseType; \
+		Type					executeType; \
+		Type					destroyType;
+	struct Stg_Component { __Stg_Component };
+
+	#define STG_COMPONENT_DEFARGS							\
+		STG_CLASS_DEFARGS,							\
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor, 	\
+		Stg_Component_ConstructFunction*		_construct, 		\
+		Stg_Component_BuildFunction*			_build, 		\
+		Stg_Component_InitialiseFunction*		_initialise, 		\
+		Stg_Component_ExecuteFunction*			_execute, 		\
+		Stg_Component_DestroyFunction*			_destroy, 		\
+		Name						name, 			\
+		AllocationType					nameAllocationType
+
+	#define STG_COMPONENT_PASSARGS						\
+		STG_CLASS_PASSARGS, _defaultConstructor, _construct, 		\
+		_build, _initialise, _execute, _destroy, 			\
+		name, nameAllocationType
+	
+	/* No Stg_Component_New or Stg_Component_Init as this is an abstract class */
+	
+	/* Creation implementation */
+	Stg_Component* _Stg_Component_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*		_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*		_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*			_destroy,
+		Name						name,
+		AllocationType					nameAllocationType );
+	
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Initialisation implementation */
+	void _Stg_Component_Init( Stg_Component* self );
+	
+	/* Stg_Class_Delete boundary condition layout implementation */
+	void _Stg_Component_Delete( void* component );
+	
+	/* Print boundary condition layout implementation */
+	void _Stg_Component_Print( void* component, Stream* stream );
+	
+	void* _Stg_Component_Copy( void* component, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	
+	/* Copy the component */
+	#define Stg_Component_Copy( self ) \
+		(Stg_Component*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Stg_Component_DeepCopy(self) \
+		(Stg_Component*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	/** Contruct the component. Configure/setup the component. */
+	void Stg_Component_Construct( void* component, Stg_ComponentFactory* cf, void* data, Bool force );
+	
+	/** Build the component: Take the configuration and instantiate the component (do all main mallocs, etc). */
+	void Stg_Component_Build( void* component, void* data, Bool force );
+	
+	/** Initialise the component: Place in initial values. After this point the component is ready to execute. */
+	void Stg_Component_Initialise( void* component, void* data, Bool force );
+	
+	/** Execute the component: Perform its task. */
+	void Stg_Component_Execute( void* component, void* data, Bool force );
+	
+	/** Destroy the component: All resources used in the other phases are released. */
+	void Stg_Component_Destroy( void* component, void* data, Bool force );
+	
+	/** Is the component constructed? (i.e. its configration/setup performed) */
+	#define Stg_Component_IsConstructedMacro( component ) \
+		((component)->isConstructed)
+	Bool Stg_Component_IsConstructedFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_IsConstructed Stg_Component_IsConstructedFunc
+	#else
+		#define Stg_Component_IsConstructed Stg_Component_IsConstructedMacro
+	#endif
+	#define IsConstructed Stg_Component_IsConstructed
+	
+	/** Is the component built? (i.e. instantiated) */
+	#define Stg_Component_IsBuiltMacro( component ) \
+		((component)->isBuilt)
+	Bool Stg_Component_IsBuiltFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_IsBuilt Stg_Component_IsBuiltFunc
+	#else
+		#define Stg_Component_IsBuilt Stg_Component_IsBuiltMacro
+	#endif
+	#define IsBuilt Stg_Component_IsBuilt
+	
+	/** Is the component initialised? (i.e. all initial values set) */
+	#define Stg_Component_IsInitialisedMacro( component ) \
+		((component)->isInitialised)
+	Bool Stg_Component_IsInitialisedFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_IsInitialised Stg_Component_IsInitialisedFunc
+	#else
+		#define Stg_Component_IsInitialised Stg_Component_IsInitialisedMacro
+	#endif
+	#define IsInitialised Stg_Component_IsInitialised
+	
+	/** Has the component executed? */
+	#define Stg_Component_HasExecutedMacro( component ) \
+		((component)->hasExecuted)
+	Bool Stg_Component_HasExecutedFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_HasExecuted Stg_Component_HasExecutedFunc
+	#else
+		#define Stg_Component_HasExecuted Stg_Component_HasExecutedMacro
+	#endif
+	#define HasExecuted Stg_Component_HasExecuted
+	
+	/** Is the component destroyed? */
+	#define Stg_Component_IsDestroyedMacro( component ) \
+		((component)->isDestroyed)
+	Bool Stg_Component_IsDestroyedFunc( void* component );
+	#ifdef MACRO_AS_FUNC
+		#define Stg_Component_IsDestroyed Stg_Component_IsDestroyedFunc
+	#else
+		#define Stg_Component_IsDestroyed Stg_Component_IsDestroyedMacro
+	#endif
+	#define IsDestroyed Stg_Component_IsDestroyed
+
+	/** Disowns the component from the current source, leaving the Live Stg_Component Register to 
+	    destroy it */
+	#define Stg_Component_Disown( component ) \
+		( Memory_CountGet( component ) > 1 ? Memory_CountDec( component ) : Stg_Class_Delete( component ) )
+
+	void Stg_Component_SetupStreamFromDictionary( void* component, Dictionary* dictionary );
+
+	#define Stg_Component_CreateMeta( name, type ) \
+		_Stg_Component_CreateMeta( name, type )
+	Stg_ComponentMeta* _Stg_Component_CreateMeta( Name name, Type type );
+
+	#define Stg_Component_Validate( component, type, dictionary ) \
+		_Stg_Component_Validate( component, type, dictionary )
+	Stg_ComponentMeta* _Stg_Component_Validate( void* component, Type type, Dictionary* dictionary );
+	
+#endif /* __Base_Automation_Stg_Component_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_Component.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Stg_Component</param>
+<param name="Author">CSD Team</param>
+<param name="Organisation">VPAC</param>
+<param name="Description">An abstract class representing the parent of all Components</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The VPAC Public License Version 1.0-rc1. The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+
+<list name="Params">
+</list>
+
+<list name="Dependencies">
+</list>
+
+
+</StGermainData>
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,690 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_ComponentFactory.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "LiveComponentRegister.h"
+#include "Stg_ComponentFactory.h"
+#include "Stg_ComponentRegister.h"
+#include "HierarchyTable.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type Stg_ComponentFactory_Type = "Stg_ComponentFactory";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+/* Creation implementation */
+Stg_ComponentFactory* _Stg_ComponentFactory_New( 
+		SizeT                                                    _sizeOfSelf,
+		Type                                                     type,
+		Stg_Class_DeleteFunction*                                _delete,
+		Stg_Class_PrintFunction*                                 _print,
+		Stg_Class_CopyFunction*                                  _copy,
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble,
+		Stg_ComponentFactory_GetIntFunc*                         getInt,
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt,
+		Stg_ComponentFactory_GetBoolFunc*                        getBool,
+		Stg_ComponentFactory_GetStringFunc*                      getString,
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble,
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt,
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt,
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool,
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString,
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName,
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey,
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback,
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList,
+		Dictionary*                                              rootDict,
+		Dictionary*                                              componentDict,
+		Stg_ObjectList*                                          registerRegister )
+{
+	Stg_ComponentFactory *self = NULL;
+
+	assert( _sizeOfSelf >= sizeof( Stg_ComponentFactory ) );
+	self = (Stg_ComponentFactory*) _Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+
+	self->getDouble = getDouble;
+	self->getInt = getInt;
+	self->getUnsignedInt = getUnsignedInt;
+	self->getBool = getBool;
+	self->getString = getString;
+
+	self->getRootDictDouble = getRootDictDouble;
+	self->getRootDictInt = getRootDictInt;
+	self->getRootDictUnsignedInt = getRootDictUnsignedInt;
+	self->getRootDictBool = getRootDictBool;
+	self->getRootDictString = getRootDictString;
+	
+	self->constructByName = constructByName;
+	self->constructByKey = constructByKey;
+	self->constructByNameWithKeyFallback  = constructByNameWithKeyFallback;
+	self->constructByList = constructByList;
+
+	self->rootDict = rootDict;
+	self->componentDict = componentDict;
+	self->registerRegister = registerRegister;
+	self->infoStream = Journal_Register( InfoStream_Type, self->type );
+	Stream_SetPrintingRank( self->infoStream, 0 );
+	Stream_SetAutoFlush( self->infoStream, True );
+		
+	_Stg_ComponentFactory_Init( self );
+	
+	return self;
+}
+	
+Stg_ComponentFactory* Stg_ComponentFactory_New( 
+		Dictionary*                                          rootDict,
+		Dictionary*                                          componentDict,
+		Stg_ObjectList*                                      registerRegister )
+{
+	Stg_ComponentFactory *self = NULL;
+
+	assert( rootDict );
+	assert( registerRegister );
+	self = _Stg_ComponentFactory_New( sizeof( Stg_ComponentFactory ), 
+					Stg_ComponentFactory_Type,
+					_Stg_ComponentFactory_Delete,
+					_Stg_ComponentFactory_Print,
+					NULL,
+					_Stg_ComponentFactory_GetDouble,
+					_Stg_ComponentFactory_GetInt,
+					_Stg_ComponentFactory_GetUnsignedInt,
+					_Stg_ComponentFactory_GetBool,
+					_Stg_ComponentFactory_GetString,
+					_Stg_ComponentFactory_GetRootDictDouble,
+					_Stg_ComponentFactory_GetRootDictInt,
+					_Stg_ComponentFactory_GetRootDictUnsignedInt,
+					_Stg_ComponentFactory_GetRootDictBool,
+					_Stg_ComponentFactory_GetRootDictString,
+					_Stg_ComponentFactory_ConstructByName,
+					_Stg_ComponentFactory_ConstructByKey,
+					_Stg_ComponentFactory_ConstructByNameWithKeyFallback,
+					_Stg_ComponentFactory_ConstructByList,
+					rootDict,
+					componentDict,
+					registerRegister );
+
+	return self;
+}
+
+void _Stg_ComponentFactory_Init( Stg_ComponentFactory *self )
+{
+	assert( self );
+	
+	self->LCRegister = LiveComponentRegister_New( );
+}
+
+void Stg_ComponentFactory_Init( Stg_ComponentFactory *self )
+{
+	assert( self );
+	_Stg_ComponentFactory_Init( self );
+}
+	
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Stg_ComponentFactory_Delete( void* cf )
+{
+	Stg_ComponentFactory *self = (Stg_ComponentFactory *) cf;
+
+	assert( self );
+
+	Stg_Class_Delete( self->LCRegister );
+	_Stg_Class_Delete( self );
+}
+	
+void _Stg_ComponentFactory_Print( void* cf, Stream* stream )
+{
+	Stg_ComponentFactory *self = (Stg_ComponentFactory*) cf;
+
+	assert( self );
+	
+	/* General info */
+	Journal_Printf( (void*) stream, "Stg_ComponentFactory (ptr): %p\n", self );
+	
+	/* Print parent class */
+	_Stg_Class_Print( self, stream );
+	
+	Journal_Printf( (void*) stream, "LiveComponentRegister (ptr): %p\n", self->LCRegister );
+	Print( self->LCRegister, stream );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+void Stg_ComponentFactory_SetComponentDictionary( Stg_ComponentFactory *self, Dictionary *dict )
+{
+	assert( self );
+	assert( dict );
+
+	self->componentDict = dict;
+}
+
+void Stg_ComponentFactory_CreateComponents( Stg_ComponentFactory *self ) {
+	Dictionary_Entry*                      componentDictEntry           = NULL;
+	Dictionary*                            currComponentDict            = NULL;
+	Type                                   componentType                = NULL;
+	Name                                   componentName                = NULL;
+	Stg_Component_DefaultConstructorFunction*  componentConstructorFunction;
+	Index                                  component_I;
+	Stream*                                stream;
+	
+	assert( self );
+	
+	stream = self->infoStream;
+	if( self->componentDict ){
+		Journal_Printf( stream, "\nCreating Stg_Components from the component-list\n\n" );
+		Stream_Indent( stream );
+	
+		for( component_I = 0; component_I < Dictionary_GetCount( self->componentDict ) ; component_I++ ){
+			componentDictEntry = self->componentDict->entryPtr[ component_I ];
+
+			currComponentDict  = Dictionary_Entry_Value_AsDictionary( componentDictEntry->value );
+			componentType      = Dictionary_GetString( currComponentDict, "Type" );
+			componentName      = componentDictEntry->key;
+
+			Journal_Firewall( 
+					LiveComponentRegister_Get( self->LCRegister, componentName ) == NULL,
+					Journal_Register( Error_Type, self->type ),
+					"Error in func %s: Trying to instantiate two components with the name of '%s'\n"
+					"Each component's name must be unique.\n",
+					__func__, componentName );
+
+			/* Print Message */
+			Journal_Printf( stream, "Instantiating %s as %s\n", componentType, componentName );
+			
+			/* Get Default Constructor for this type */
+			componentConstructorFunction = Stg_ComponentRegister_AssertGet( 
+					Stg_ComponentRegister_Get_ComponentRegister(), componentType, "0" );
+
+			/* Add to register */
+			LiveComponentRegister_Add( self->LCRegister,
+					componentConstructorFunction( componentName ) );
+		}
+		Stream_UnIndent( stream );
+	}
+	else{
+		Journal_Printf( stream, "No Stg_Component List found..!\n" );
+	}
+}
+
+void Stg_ComponentFactory_ConstructComponents( Stg_ComponentFactory* self, void* data ) {
+	Dictionary_Entry*                      componentDictEntry           = NULL;
+	Dictionary*                            currComponentDict            = NULL;
+	Type                                   componentType                = NULL;
+	Name                                   componentName                = NULL;
+	Stg_Component*                         component                    = NULL;
+	Index                                  component_I;
+	Stream*                                stream;
+	
+	assert( self );
+	
+	if( self->componentDict ){
+		stream = self->infoStream;
+		Journal_Printf( stream, "\nConstructing Stg_Components from the live-component register\n\n" );
+		Stream_Indent( stream );
+	
+		for( component_I = 0; component_I < Dictionary_GetCount( self->componentDict ) ; component_I++ ){
+			componentDictEntry = self->componentDict->entryPtr[ component_I ];
+
+			currComponentDict  = Dictionary_Entry_Value_AsDictionary( componentDictEntry->value );
+			componentType      = Dictionary_GetString( currComponentDict, "Type" );
+			componentName      = componentDictEntry->key;
+
+			/* Grab component from register */
+			component = LiveComponentRegister_Get( self->LCRegister, componentName );
+			if( component && !component->isConstructed ){
+				Stg_Component_Construct( component, self, data, True );
+			}
+		}
+		Stream_UnIndent( stream );
+	}
+	else{
+		Journal_Printf( stream, "No Stg_ComponentList found..!\n" );
+	}
+}
+
+Dictionary_Entry_Value* _Stg_ComponentFactory_GetDictionaryValue( void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) {
+	Stg_ComponentFactory*       self              = (Stg_ComponentFactory*) cf;
+	Dictionary*             componentDict     = NULL;
+	Dictionary*             thisComponentDict = NULL;
+	Dictionary_Entry_Value* returnVal;
+	Bool                    usedDefault       = False;
+	Stream*                 errorStream       = Journal_Register( Error_Type, Stg_Component_Type );
+	Stream*                 stream            = self->infoStream;
+
+	Journal_Firewall( self != NULL, errorStream, "In func %s: Stg_ComponentFactory is NULL.\n", __func__ );
+
+	Journal_PrintfL( stream, 2, "Getting parameter '%s': ", key );
+
+	/* Get this Stg_Component's Dictionary */
+	componentDict = self->componentDict;
+	Journal_Firewall( componentDict != NULL, errorStream, 
+			"In func %s: Stg_Component Factory's dictionary is NULL.\n", __func__ );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, componentName );
+	Journal_Firewall( thisComponentDict != NULL, errorStream,
+			"In func %s: Can't find sub-dictionary for component '%s'.\n", __func__, componentName );
+
+	/* Get Value from dictionary */
+	returnVal = Dictionary_Get( thisComponentDict, key );
+	if ( !returnVal && defaultVal ) {
+		returnVal = Dictionary_GetDefault( thisComponentDict, key, defaultVal );
+		usedDefault = True;
+	}
+
+	/* Print Stuff */
+	if ( usedDefault ) {
+		Journal_PrintfL( stream, 2, "Using default value = " );
+		if ( Stream_IsPrintableLevel( stream, 2 ) ) 
+			Dictionary_Entry_Value_Print( returnVal, stream );
+		Journal_PrintfL( stream, 2, "\n" );
+
+		return returnVal;
+	}
+	else if ( returnVal ) {
+		Journal_PrintfL( stream, 2, "Found - Value = " );
+		if ( Stream_IsPrintableLevel( stream, 2 ) ) 
+			Dictionary_Entry_Value_Print( returnVal, stream );
+		Journal_PrintfL( stream, 2, "\n" );
+	}
+	else 
+		Journal_PrintfL( stream, 2, "Not found.\n" );
+
+	return returnVal;
+}
+
+Dictionary_Entry_Value* _Stg_ComponentFactory_GetNumericalValue( void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) {
+	Stg_ComponentFactory*       self              = (Stg_ComponentFactory*) cf;
+	Dictionary_Entry_Value* returnVal;
+	Bool                    usedDefault       = False;
+	Stream*                 errorStream       = Journal_Register( Error_Type, Stg_Component_Type );
+	Stream*                 stream            = self->infoStream;
+
+	returnVal = _Stg_ComponentFactory_GetDictionaryValue( self, componentName, key, defaultVal );
+
+	/* Check to see whether the type is a string -
+	 * if it is then assume that this is a dictionary key linking to the root dictionary */
+	if ( returnVal ) {
+		Dictionary_Entry_Key rootDictKey = Dictionary_Entry_Value_AsString( returnVal );
+		Dictionary*          rootDict    = self->rootDict;
+
+		/* Check if the number really is a string or not */
+		if ( Stg_StringIsNumeric( rootDictKey ) )
+			return returnVal;
+		
+		Journal_PrintfL( stream, 2, "Key '%s' points to key '%s' in the root dictionary: ", key, rootDictKey );
+
+		Journal_Firewall( rootDict != NULL, errorStream, "Root Dictionary NULL in component factory.\n" );
+
+		/* Get Value from dictionary */
+		returnVal = Dictionary_Get( rootDict, rootDictKey );
+		if ( !returnVal && defaultVal ) {
+			returnVal = Dictionary_GetDefault( rootDict, rootDictKey, defaultVal );
+			usedDefault = True;
+		}
+
+		/* Print Stuff */
+		if ( usedDefault ) {
+			Journal_PrintfL( stream, 2, "Using default value = " );
+			if ( Stream_IsPrintableLevel( stream, 2 ) ) 
+				Dictionary_Entry_Value_Print( returnVal, stream );
+			Journal_PrintfL( stream, 2, "\n" );
+			return returnVal;
+		}
+		else if ( returnVal ) {
+			Journal_PrintfL( stream, 2, "Found - Value = " );
+			if ( Stream_IsPrintableLevel( stream, 2 ) ) 
+				Dictionary_Entry_Value_Print( returnVal, stream );
+			Journal_PrintfL( stream, 2, "\n" );
+		}
+		else 
+			Journal_PrintfL( stream, 2, "Not found.\n" );
+	}
+
+	return returnVal;
+}
+
+double Stg_ComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, double defaultVal ) {
+        Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+        return self->getDouble( cf, componentName, key, defaultVal );
+}
+double _Stg_ComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, double defaultVal ) {
+	return Dictionary_Entry_Value_AsDouble( 
+			_Stg_ComponentFactory_GetNumericalValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromDouble( defaultVal )));
+}
+int Stg_ComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, int defaultVal ) {
+	Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+	return self->getInt( cf, componentName, key, defaultVal );
+}
+int _Stg_ComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, int defaultVal ) {
+	return Dictionary_Entry_Value_AsInt( 
+			_Stg_ComponentFactory_GetNumericalValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromInt( defaultVal ) ) );
+}	
+unsigned int Stg_ComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, unsigned int defaultVal ) {
+	Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+	return self->getUnsignedInt( cf, componentName, key, defaultVal );
+}
+unsigned int _Stg_ComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, unsigned int defaultVal ) {
+	unsigned int retVal;
+	retVal = Dictionary_Entry_Value_AsUnsignedInt( 
+			_Stg_ComponentFactory_GetNumericalValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromUnsignedInt( defaultVal )));
+	// TODO : Possible memory leak if defaultVal not added to the dictionary
+	return retVal;
+}	
+Bool Stg_ComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, Bool defaultVal ) {
+	Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+	return self->getBool( cf, componentName, key, defaultVal );
+}
+Bool _Stg_ComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, Bool defaultVal ) {
+	return Dictionary_Entry_Value_AsBool( 
+			_Stg_ComponentFactory_GetDictionaryValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromBool( defaultVal ) ) );
+}	
+char* Stg_ComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) {
+	Stg_ComponentFactory* self = (Stg_ComponentFactory*)cf;
+	return self->getString( cf, componentName, key, defaultVal );
+}
+char* _Stg_ComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) {
+	return Dictionary_Entry_Value_AsString( 
+			_Stg_ComponentFactory_GetDictionaryValue( cf, componentName, key, 
+				Dictionary_Entry_Value_FromString( defaultVal ) ) );
+}
+
+
+double Stg_ComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictDouble( self, key, defaultVal );
+}
+double _Stg_ComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	
+	Journal_PrintfL( self->infoStream, 2, "Getting double from root dictionary with key '%s' and default value '%g'\n",
+			key, defaultVal );
+
+	assert( self->rootDict );
+	return Dictionary_GetDouble_WithDefault( self->rootDict, key, defaultVal );
+}
+int Stg_ComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictInt( self, key, defaultVal );
+}
+int _Stg_ComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	
+	Journal_PrintfL( self->infoStream, 2, "Getting int from root dictionary with key '%s' and default value '%d'\n",
+			key, defaultVal );
+
+	assert( self->rootDict );
+	return Dictionary_GetInt_WithDefault( self->rootDict, key, defaultVal );
+}	
+unsigned int Stg_ComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictUnsignedInt( self, key, defaultVal );
+}
+unsigned int _Stg_ComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	
+	Journal_PrintfL( self->infoStream,2, "Getting unsigned int from root dictionary with key '%s' and default value '%u'\n",
+			key, defaultVal );
+
+	assert( self->rootDict );
+	return Dictionary_GetUnsignedInt_WithDefault( self->rootDict, key, defaultVal );
+}	
+Bool Stg_ComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictBool( self, key, defaultVal );
+}
+Bool _Stg_ComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	
+	Journal_PrintfL( self->infoStream, 2, "Getting Bool from root dictionary with key '%s' and default value '%s'\n",
+			key, defaultVal ? "True" : "False" );
+
+	assert( self->rootDict );
+	return Dictionary_GetBool_WithDefault( self->rootDict, key, defaultVal );
+}	
+char* Stg_ComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* const defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+	return self->getRootDictString( self, key, defaultVal );
+}
+char* _Stg_ComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* const defaultVal ) {
+	Stg_ComponentFactory*    self              = (Stg_ComponentFactory*)cf;
+
+	Journal_PrintfL( self->infoStream, 2, "Getting string from root dictionary with key '%s' and default value '%s'\n",
+			key, defaultVal );
+
+	assert( self->rootDict );
+	return Dictionary_GetString_WithDefault( self->rootDict, key, defaultVal );
+}
+
+
+Stg_Component* _Stg_ComponentFactory_ConstructByName( void* cf, Name componentName, Type type, Bool isEssential, void* data ) {
+	Stg_ComponentFactory*	self              = (Stg_ComponentFactory*)cf;
+	Stg_Component*		component;
+	Stream*			stream            = self->infoStream;
+
+	Journal_PrintfL( stream, 2, "Looking for %sessential component '%s': ", (isEssential ? "" : "non-"), componentName );
+
+	component = LiveComponentRegister_Get( self->LCRegister, componentName );
+
+	/* Checking */
+	if (component) {
+		Journal_PrintfL( stream, 2, "Found.\n" );
+
+		if ( !component->isConstructed ) {
+			Journal_Printf( stream, "%s has not been constructed yet. Constructing now.\n", componentName );
+			Stream_Indent( stream );
+			Stg_Component_Construct( component, self, data, True );
+			Stream_UnIndent( stream );
+		}
+
+		Stg_Class_CheckType( component, type );
+
+		/* Note: I think we should disable the line below here since this function is only providing a reference
+		to an existing object, not creating a brand new one, and it was thus stuffing up the count so the
+		original object never got deleted. If we are going to do reference counting we need to adapt it across
+		the board so whenever you request access to memory you delete your own reference.
+		-- Main.PatrickSunter 18 May 2006 */
+		Memory_CountInc( component );
+	}
+	else {
+		Journal_PrintfL( stream, 2, "Not found.\n" );
+
+		if ( isEssential ) {
+			Stream* errorStream = Journal_Register( Error_Type, self->type );
+
+			Journal_Printf( errorStream, "In func %s: Cannot find essential component '%s'.\n", __func__, componentName );
+
+			Journal_Printf( errorStream, "Could you have meant one of these?\n" );
+
+			Stream_Indent( errorStream );
+			LiveComponentRegister_PrintSimilar( self->LCRegister, componentName, errorStream, 5 );
+			abort();
+		}
+	}
+	
+	return component;
+}
+
+Stg_Component* _Stg_ComponentFactory_ConstructByKey( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Dictionary_Entry_Key	componentKey,
+		Type			type, 
+		Bool 			isEssential,
+		void* 			data ) 
+{
+	Stg_ComponentFactory*	self              = (Stg_ComponentFactory*)cf;
+	Dictionary*		thisComponentDict = NULL;
+	Dictionary*		componentDict     = NULL;
+	Name			componentName;
+	Dictionary_Entry_Value*	componentEntryVal;
+	Stream*			errorStream       = Journal_Register( Error_Type, self->type );
+
+	Journal_Firewall( self != NULL, errorStream, "In func %s: Stg_Component is NULL.\n", __func__ );
+
+	/* Get this Stg_Component's Dictionary */
+	componentDict = self->componentDict;
+	Journal_Firewall( componentDict != NULL, errorStream, 
+			"In func %s: Stg_Component Factory's dictionary is NULL.\n", __func__ );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, parentComponentName );
+	Journal_Firewall( thisComponentDict != NULL, errorStream,
+			"In func %s: Can't find sub-dictionary for component '%s'.\n", __func__, parentComponentName );
+
+	/* Get Dependency's Name */
+	componentEntryVal = Dictionary_Get( thisComponentDict, componentKey );
+	if ( componentEntryVal == NULL ) {
+		Journal_Firewall( !isEssential, errorStream,
+				"Stg_Component '%s' cannot find essential component with key '%s'.\n", parentComponentName, componentKey );
+		Journal_PrintfL( self->infoStream, 2, "Stg_Component '%s' cannot find non-essential component with key '%s'.\n", parentComponentName, componentKey );
+		return NULL;
+	}
+		
+	componentName = Dictionary_Entry_Value_AsString( componentEntryVal );
+
+	return self->constructByName( self, componentName, type, isEssential, data );
+}
+
+Stg_Component* _Stg_ComponentFactory_ConstructByNameWithKeyFallback( 
+		void*			cf, 
+		Name 			parentComponentName, 
+		Name			componentTrialName, 
+		Dictionary_Entry_Key	fallbackKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) 
+{
+	Stg_ComponentFactory*	self              = (Stg_ComponentFactory*)cf;
+	Stg_Component*		component;
+	Stream*			stream            = self->infoStream;
+
+	Journal_PrintfL( stream, 2, "First Trying to find component by name '%s': ", componentTrialName );
+	component = LiveComponentRegister_Get( self->LCRegister, componentTrialName );
+	
+	if (component) {
+		Journal_PrintfL( stream, 2, "Found.\n" );
+
+		if ( !component->isConstructed ) {
+			Journal_Printf( stream, "%s has not been constructed yet. Constructing now.\n", componentTrialName );
+			Stream_Indent( stream );
+			Stg_Component_Construct( component, self, data, True );
+			Stream_UnIndent( stream );
+		}
+	}
+	else {
+		Journal_PrintfL( stream, 2, "Not found.\n" );
+		Journal_PrintfL( stream, 2, "Fallback - Trying to find component by key '%s'.\n", fallbackKey );
+
+		component = self->constructByKey( self, parentComponentName, fallbackKey, type, isEssential, data );
+	}
+		
+	return component;
+}
+
+Stg_Component** _Stg_ComponentFactory_ConstructByList( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Name			listName, 
+		unsigned int		maxComponents,
+		Type			type,
+		Bool			isEssential,
+		unsigned int*		componentCount,
+		void*			data )
+{
+	Stg_ComponentFactory*	self              = (Stg_ComponentFactory*)cf;
+	Dictionary*		thisComponentDict = NULL;
+	Dictionary*		componentDict     = NULL;
+	Name			componentName;
+	Dictionary_Entry_Value*	list;
+	Stg_Component**		componentList;
+	Index			component_I;
+	Stream*			errorStream       = Journal_Register( Error_Type, self->type );
+
+	Journal_Firewall( self != NULL, errorStream, "In func %s: Stg_Component is NULL.\n", __func__ );
+
+	/* Get this Stg_Component's Dictionary */
+	componentDict = self->componentDict;
+	Journal_Firewall( componentDict != NULL, errorStream, 
+			"In func %s: Stg_Component Factory's dictionary is NULL.\n", __func__ );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, parentComponentName );
+	Journal_Firewall( thisComponentDict != NULL, errorStream,
+			"In func %s: Can't find sub-dictionary for component '%s'.\n", __func__, parentComponentName );
+	
+	Journal_PrintfL( self->infoStream, 2, "Looking for list '%s': ", listName );
+	if (( list = Dictionary_Get( thisComponentDict, listName ) )) {
+		Journal_PrintfL( self->infoStream, 2, "Found.\n" );
+
+		*componentCount = MIN( Dictionary_Entry_Value_GetCount( list ), maxComponents );
+
+		componentList = Memory_Alloc_Array( Stg_Component*, *componentCount, "componentList" );
+	
+		Stream_Indent( self->infoStream );
+		for ( component_I = 0 ; component_I < *componentCount ; component_I++ ) {
+			componentName = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement( list, component_I ) );
+
+			componentList[ component_I ] = self->constructByName( self, componentName, type, isEssential, data );
+		}
+		Stream_UnIndent( self->infoStream );
+	}
+	else {
+		Journal_PrintfL( self->infoStream, 2, "Not Found.\n" );
+
+		Journal_Firewall( !isEssential, errorStream, "Stg_Component '%s' cannot find list '%s'.\n", 
+				parentComponentName, listName );
+
+		*componentCount = 0;
+		componentList   = NULL;
+	}
+
+	return componentList;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentFactory.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,281 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+**
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_ComponentFactory.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+#ifndef __Base_Automation_Stg_ComponentFactory_h__
+#define __Base_Automation_Stg_ComponentFactory_h__
+
+	extern const Type Stg_ComponentFactory_Type;
+	
+	typedef double (Stg_ComponentFactory_GetDoubleFunc) (
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const double         defaultVal );
+	typedef int (Stg_ComponentFactory_GetIntFunc) ( 
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const int            defaultVal );
+	typedef unsigned int (Stg_ComponentFactory_GetUnsignedIntFunc) (
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const unsigned int   defaultVal);
+	typedef Bool (Stg_ComponentFactory_GetBoolFunc) ( 
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const Bool           defaultVal );
+	typedef char* (Stg_ComponentFactory_GetStringFunc) ( 
+			void*                cf, 
+			Name                 componentName, 
+			Dictionary_Entry_Key key, 
+			const char*          defaultVal ) ;
+
+	
+	typedef double (Stg_ComponentFactory_GetRootDictDoubleFunc) (
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const double         defaultVal );
+	typedef int (Stg_ComponentFactory_GetRootDictIntFunc) ( 
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const int            defaultVal );
+	typedef unsigned int (Stg_ComponentFactory_GetRootDictUnsignedIntFunc) (
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const unsigned int   defaultVal);
+	typedef Bool (Stg_ComponentFactory_GetRootDictBoolFunc) ( 
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const Bool           defaultVal );
+	typedef char* (Stg_ComponentFactory_GetRootDictStringFunc) ( 
+			void*                cf, 
+			Dictionary_Entry_Key key, 
+			const char*          defaultVal ) ;
+
+	typedef Stg_Component* (Stg_ComponentFactory_ConstructByNameFunc) ( 
+			void*                cf, 
+			Name                 componentName, 
+			Type                 type, 
+			Bool                 isEssential,
+			void*                data ) ;
+	typedef Stg_Component* (Stg_ComponentFactory_ConstructByKeyFunc) (
+			void*                cf, 
+			Name                 parentComponentName, 
+			Dictionary_Entry_Key componentKey, 
+			Type                 type, 
+			Bool                 isEssential,
+			void*                data );
+	typedef Stg_Component* (Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc) ( 
+			void*                cf, 
+			Name                 parentComponentName, 
+			Name                 componentTrialName, 
+			Dictionary_Entry_Key componentTrialKey, 
+			Type                 type, 
+			Bool                 isEssential,
+			void*                data ) ;
+
+	typedef Stg_Component** (Stg_ComponentFactory_ConstructByListFunc) ( 
+			void*                cf, 
+			Name                 parentComponentName, 
+			Name                 listName, 
+			unsigned int         maxComponents,
+			Type                 type, 
+			Bool                 isEssential,
+			unsigned int*        componentCount,
+			void*                data ) ;
+
+	#define __Stg_ComponentFactory \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble; \
+		Stg_ComponentFactory_GetIntFunc*                         getInt; \
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt; \
+		Stg_ComponentFactory_GetBoolFunc*                        getBool; \
+		Stg_ComponentFactory_GetStringFunc*                      getString; \
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble; \
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt; \
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt; \
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool; \
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString; \
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName; \
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey; \
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback; \
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList; \
+		\
+		/* Class info */ \
+		Stg_ObjectList*                                          registerRegister; \
+		Dictionary*                                              rootDict; \
+		Dictionary*                                              componentDict; \
+		LiveComponentRegister*                                   LCRegister;    \
+		Stream*                                                  infoStream;    
+		
+	struct Stg_ComponentFactory { __Stg_ComponentFactory };
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	/* Creation implementation */
+	Stg_ComponentFactory* _Stg_ComponentFactory_New( 
+		SizeT                                                    _sizeOfSelf,
+		Type                                                     type,
+		Stg_Class_DeleteFunction*                                _delete,
+		Stg_Class_PrintFunction*                                 _print,
+		Stg_Class_CopyFunction*                                  _copy,
+		Stg_ComponentFactory_GetDoubleFunc*                      getDouble,
+		Stg_ComponentFactory_GetIntFunc*                         getInt,
+		Stg_ComponentFactory_GetUnsignedIntFunc*                 getUnsignedInt,
+		Stg_ComponentFactory_GetBoolFunc*                        getBool,
+		Stg_ComponentFactory_GetStringFunc*                      getString,
+		Stg_ComponentFactory_GetRootDictDoubleFunc*              getRootDictDouble,
+		Stg_ComponentFactory_GetRootDictIntFunc*                 getRootDictInt,
+		Stg_ComponentFactory_GetRootDictUnsignedIntFunc*         getRootDictUnsignedInt,
+		Stg_ComponentFactory_GetRootDictBoolFunc*                getRootDictBool,
+		Stg_ComponentFactory_GetRootDictStringFunc*              getRootDictString,
+		Stg_ComponentFactory_ConstructByNameFunc*                constructByName,
+		Stg_ComponentFactory_ConstructByKeyFunc*                 constructByKey,
+		Stg_ComponentFactory_ConstructByNameWithKeyFallbackFunc* constructByNameWithKeyFallback,
+		Stg_ComponentFactory_ConstructByListFunc*                constructByList,
+		Dictionary*                                              rootDict,
+		Dictionary*                                              componentDict,
+		Stg_ObjectList*                                          registerRegister );
+	
+	Stg_ComponentFactory* Stg_ComponentFactory_New( 
+		Dictionary*                                              rootDict,
+		Dictionary*                                              componentDict,
+		Stg_ObjectList*                                          registerRegister );
+
+	void _Stg_ComponentFactory_Init( Stg_ComponentFactory *self );
+	
+	void Stg_ComponentFactory_Init( Stg_ComponentFactory *self );
+
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+
+	void _Stg_ComponentFactory_Delete( void* Stg_ComponentFactory );
+	
+	void _Stg_ComponentFactory_Print( void* Stg_ComponentFactory, Stream* stream );
+	
+	/*-----------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	void Stg_ComponentFactory_SetComponentDictionary( Stg_ComponentFactory *self, Dictionary *dict );
+
+	void Stg_ComponentFactory_CreateComponents( Stg_ComponentFactory *self );
+	
+	void Stg_ComponentFactory_ConstructComponents( Stg_ComponentFactory* self, void* data );
+	
+	Dictionary_Entry_Value* _Stg_ComponentFactory_GetDictionaryValue( 
+			void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) ;
+
+	/** Function to get *numerical* values from component's dictionary
+	 * if the key in the sub-dictionary gives a string then it assumes 
+	 * that this is a key that points to the root dictionary */
+	Dictionary_Entry_Value* _Stg_ComponentFactory_GetNumericalValue( void* cf, Name componentName, Dictionary_Entry_Key key, Dictionary_Entry_Value* defaultVal ) ;
+
+	double Stg_ComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, const double defaultVal ) ;
+	double _Stg_ComponentFactory_GetDouble( void* cf, Name componentName, Dictionary_Entry_Key key, const double defaultVal ) ;
+	int Stg_ComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, const int defaultVal ) ;
+	int _Stg_ComponentFactory_GetInt( void* cf, Name componentName, Dictionary_Entry_Key key, const int defaultVal ) ;
+	unsigned int Stg_ComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	unsigned int _Stg_ComponentFactory_GetUnsignedInt( void* cf, Name componentName, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	Bool Stg_ComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	Bool _Stg_ComponentFactory_GetBool( void* cf, Name componentName, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	char* Stg_ComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) ;
+	char* _Stg_ComponentFactory_GetString( void* cf, Name componentName, Dictionary_Entry_Key key, const char* const defaultVal ) ;
+
+	double Stg_ComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) ;
+	double _Stg_ComponentFactory_GetRootDictDouble( void* cf, Dictionary_Entry_Key key, const double defaultVal ) ;
+	int Stg_ComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) ;
+	int _Stg_ComponentFactory_GetRootDictInt( void* cf, Dictionary_Entry_Key key, const int defaultVal ) ;
+	unsigned int Stg_ComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	unsigned int _Stg_ComponentFactory_GetRootDictUnsignedInt( void* cf, Dictionary_Entry_Key key, const unsigned int defaultVal);
+	Bool Stg_ComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	Bool _Stg_ComponentFactory_GetRootDictBool( void* cf, Dictionary_Entry_Key key, const Bool defaultVal ) ;
+	char* Stg_ComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* defaultVal ) ;
+	char* _Stg_ComponentFactory_GetRootDictString( void* cf, Dictionary_Entry_Key key, const char* defaultVal ) ;
+
+	#define Stg_ComponentFactory_ConstructByName( cf, componentName, type, isEssential, data ) \
+		(type*) ( (Stg_ComponentFactory*) cf )->constructByName( cf, componentName, type ## _Type, isEssential, data )
+	Stg_Component* _Stg_ComponentFactory_ConstructByName( void* cf, Name componentName, Type type, Bool isEssential, void* d );
+	
+	#define Stg_ComponentFactory_ConstructByKey( cf, parentComponentName, componentKey, type, isEssential, data ) \
+		(type*) ( (Stg_ComponentFactory*) cf )->constructByKey( \
+			cf, parentComponentName, componentKey, type ## _Type, isEssential, data )
+	Stg_Component* _Stg_ComponentFactory_ConstructByKey( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Dictionary_Entry_Key	componentKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+
+	#define Stg_ComponentFactory_ConstructByNameWithKeyFallback( \
+		cf, parentComponentName, componentTrialName, componentFallbackKey, type, isEssential, data ) \
+		(type*) ( (Stg_ComponentFactory*) cf )->constructByNameWithKeyFallback( \
+			cf, parentComponentName, componentTrialName, componentFallbackKey, type ## _Type, isEssential, data )
+	Stg_Component* _Stg_ComponentFactory_ConstructByNameWithKeyFallback( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Name			componentTrialName, 
+		Dictionary_Entry_Key	componentTrialKey, 
+		Type			type, 
+		Bool			isEssential,
+		void*			data ) ;
+
+	#define Stg_ComponentFactory_ConstructByList( \
+		cf, parentComponentName, listName, maxComponents, type, isEssential, componentCount, data ) \
+		(type**) ( (Stg_ComponentFactory*) cf )->constructByList( \
+			cf, parentComponentName, listName, maxComponents, type ## _Type, isEssential, componentCount, data )
+
+	Stg_Component** _Stg_ComponentFactory_ConstructByList( 
+		void*			cf, 
+		Name			parentComponentName, 
+		Name			listName, 
+		unsigned int		maxComponents,
+		Type			type,
+		Bool			isEssential,
+		unsigned int*		componentCount,
+		void*			data );
+
+	#define Stg_ComponentFactory_Unlimited ((unsigned int) -1)
+
+#endif /* __Base_Automation_Stg_ComponentFactory_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,232 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	A class which encapsulates the instance meta data.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_ComponentMeta.h 3367 2005-12-09 07:39:53Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+const Type Stg_ComponentMeta_Value_Type = "Stg_ComponentMeta_Value";
+
+Stg_ComponentMeta_Value* Stg_ComponentMeta_Value_New( Name name, Type metaType, const char* description, const char* defaultValue ) {
+	Stg_ComponentMeta_Value* self;
+	self = (Stg_ComponentMeta_Value*)_Stg_Object_New(
+			sizeof( Stg_ComponentMeta_Value ),
+			Stg_ComponentMeta_Value_Type,
+			_Stg_ComponentMeta_Value_Delete,
+			NULL,
+			_Stg_ComponentMeta_Value_Copy,//NULL,
+			name,
+			NON_GLOBAL );
+	self->metaType = metaType;
+	self->description = description;
+	self->defaultValue = defaultValue;
+	self->haveValue = False;
+
+	return self;
+}
+void _Stg_ComponentMeta_Value_Delete( void* instance ) {
+
+	Stg_ComponentMeta_Value* self = (Stg_ComponentMeta_Value*) instance;
+
+	/* Delete the specific ComponentMeta_Value members that were given memory. */
+	if (self->description) Memory_Free((char*) self->description);
+	if (self->defaultValue) Memory_Free((char*) self->defaultValue);
+
+	_Stg_Object_Delete( instance );
+}
+
+void* _Stg_ComponentMeta_Value_Copy( void* instance, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+
+	Stg_ComponentMeta_Value*  self = (Stg_ComponentMeta_Value*)instance;
+
+	Stg_ComponentMeta_Value*  newComponentMeta_Value;
+
+	/* Copy the generic Stg_Object members */
+        newComponentMeta_Value = _Stg_Object_Copy( instance, dest, deep, nameExt, ptrMap );
+
+	/* Copy the Stg_ComponentMeta_Value specific members  that don't require memory*/
+	newComponentMeta_Value->metaType = self->metaType;
+       	newComponentMeta_Value->haveValue = self->haveValue;
+
+	if(deep)
+	{
+		if( (newComponentMeta_Value->description = PtrMap_Find( ptrMap, (char*) self->description )) == NULL && self->description ) {
+			newComponentMeta_Value->description = (const char*) Memory_Alloc_Array( char, strlen(self->description) + 1, "ComponentMeta_V->description" );
+			strcpy((char*) newComponentMeta_Value->description, self->description);
+			PtrMap_Append( ptrMap, (char*)newComponentMeta_Value->description, (char*)self->description);
+		}
+		if( (newComponentMeta_Value->defaultValue = PtrMap_Find( ptrMap, (char*)self->defaultValue )) == NULL && self->defaultValue ) {
+			newComponentMeta_Value->defaultValue = (const char*) Memory_Alloc_Array( char, strlen(self->defaultValue) + 1, "ComponentMeta_V->defaultValue" );
+			strcpy((char*) newComponentMeta_Value->defaultValue, self->defaultValue);
+			PtrMap_Append( ptrMap, (char*) newComponentMeta_Value->defaultValue, (char*) self->defaultValue);
+		}
+	}
+	else
+	{
+		newComponentMeta_Value->description = self->description;
+		newComponentMeta_Value->defaultValue = self->defaultValue;
+	}
+
+	return newComponentMeta_Value;
+}
+
+
+const Type Stg_ComponentMeta_Type = "Stg_ComponentMeta";
+
+Stg_ComponentMeta* Stg_ComponentMeta_New( Name name, Type metaType ) {
+	Stg_ComponentMeta* self;
+
+	self = (Stg_ComponentMeta*)_Stg_Object_New(
+			sizeof( Stg_ComponentMeta ),
+			Stg_ComponentMeta_Type,
+			_Stg_ComponentMeta_Delete,
+			_Stg_ComponentMeta_Print,
+			_Stg_ComponentMeta_Copy,
+			name,
+			NON_GLOBAL );
+
+	self->ioHandler = NULL;
+	self->dict = NULL;
+	self->metaType = metaType;
+	self->isValid = True;
+	self->project = NULL;
+	self->location = NULL;
+	self->web = NULL;
+	self->copyright = NULL;
+	self->license = NULL;
+	self->parent = NULL;
+	self->description = NULL;
+	
+	self->allDependencies = Stg_ObjectList_New();
+	self->essentialDependencies = Stg_ObjectList_New();
+	self->optionalDependencies = Stg_ObjectList_New();
+	self->missingDependencies = Stg_ObjectList_New();
+	self->unexpectedDependencies = Stg_ObjectList_New();
+
+	self->allParams = Stg_ObjectList_New();
+	
+	return self;
+}
+void _Stg_ComponentMeta_Delete( void* instance ) {
+	Stg_ComponentMeta* self = (Stg_ComponentMeta*)instance;
+
+	if ( self->ioHandler ) {
+		Stg_Class_Delete( self->ioHandler );
+	}
+	if ( self->dict ) {
+		Stg_Class_Delete( self->dict );
+	}
+	Stg_Class_Delete( self->allDependencies );
+	Stg_Class_Delete( self->essentialDependencies );
+	Stg_Class_Delete( self->optionalDependencies );
+	Stg_Class_Delete( self->missingDependencies );
+	Stg_Class_Delete( self->unexpectedDependencies );
+	Stg_Class_Delete( self->allParams );
+}
+	
+void _Stg_ComponentMeta_Print( void* instance, Stream* stream ) {
+	Stg_ComponentMeta* self = (Stg_ComponentMeta*)instance;
+	int i;
+
+	Journal_Printf( stream, "Name: %s\n", self->name );
+	Journal_Printf( stream, "Type: %s\n", self->metaType );
+	Journal_Printf( stream, "Project: %s\n", self->project );
+	Journal_Printf( stream, "Location: %s\n", self->location );
+	Journal_Printf( stream, "Project Web: %s\n", self->web );
+	Journal_Printf( stream, "Copyright: %s\n", self->copyright );
+	Journal_Printf( stream, "License: %s\n", self->license );
+	Journal_Printf( stream, "Parent: %s\n", self->parent );
+	Journal_Printf( stream, "Description: %s\n", self->description );
+	Journal_Printf( stream, "isValid: %d\n", self->isValid );
+
+	Journal_Printf( stream, "All dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->allDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->allDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "Essential dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->essentialDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->essentialDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "Optional dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->optionalDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->optionalDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "Missing dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->missingDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->missingDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "Unexpected dependencies\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->unexpectedDependencies->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->unexpectedDependencies, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+	Journal_Printf( stream, "All params\n" );
+	Stream_Indent( stream );
+	for ( i = 0; i < self->allParams->count; ++i ) {
+		Journal_Printf( stream, "%s\n", ((Stg_ComponentMeta_Value*)Stg_ObjectList_At( self->allParams, i ))->name );
+	}
+	Stream_UnIndent( stream );
+	
+}
+
+void* _Stg_ComponentMeta_Copy( void* instance, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	return NULL;
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentMeta.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,94 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	A class which encapsulates the component meta data.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_ComponentMeta.h 3367 2005-12-09 07:39:53Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Stg_ComponentMeta_h__
+#define __Base_Automation_Stg_ComponentMeta_h__
+	
+	#define __Stg_ComponentMeta_Value       \
+		__Stg_Object                    \
+		Type            metaType;       \
+		const char*     description;    \
+		const char*     defaultValue;   \
+		Bool            haveValue;
+
+	struct Stg_ComponentMeta_Value { __Stg_ComponentMeta_Value };
+
+	Stg_ComponentMeta_Value* Stg_ComponentMeta_Value_New( Name name, Type metaType, const char* description, const char* defaultValue );
+	void _Stg_ComponentMeta_Value_Delete( void* instance );
+	void* _Stg_ComponentMeta_Value_Copy( void* instance, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	/* Textual name of this class */
+	extern const Type Stg_ComponentMeta_Type;
+
+	
+	/* Stg_ComponentMeta information */
+	#define __Stg_ComponentMeta \
+		__Stg_Object \
+		\
+		XML_IO_Handler* ioHandler; /** For buffer memory */     \
+		Dictionary*     dict;      /** For buffer memory */     \
+		Type            metaType;  /**< Type of the component */\
+		char*           project;                                \
+		char*           location;                               \
+		char*           web;                                    \
+		char*           copyright;                              \
+	        char*           license;                                \
+		char*           parent;                                 \
+		char*           description;                            \
+		Bool            isValid;                                \
+		Stg_ObjectList* allDependencies;                        \
+		Stg_ObjectList* essentialDependencies;                  \
+		Stg_ObjectList* optionalDependencies;                   \
+		Stg_ObjectList* missingDependencies;                    \
+		Stg_ObjectList* unexpectedDependencies;                 \
+		\
+	        Stg_ObjectList* allParams;                              
+	
+	struct Stg_ComponentMeta { __Stg_ComponentMeta };
+	
+	Stg_ComponentMeta* Stg_ComponentMeta_New( Name name, Type metaType );
+	
+	void _Stg_ComponentMeta_Delete( void* component );
+	
+	void _Stg_ComponentMeta_Print( void* component, Stream* stream );
+	
+	void* _Stg_ComponentMeta_Copy( void* component, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+#endif /* __Base_Automation_Stg_ComponentMeta_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,421 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Stg_ComponentRegister.c 2745 2005-05-1 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentRegister.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+/* Textual name of this class */
+const Type Stg_ComponentRegister_Type = "Stg_ComponentRegister";
+
+const Name Version = "0";
+Stg_ComponentRegister *stgComponentRegister = NULL;
+
+Stg_ComponentRegister *_Stg_ComponentRegister_New(
+	SizeT					_sizeOfSelf, 
+	Type					type,
+	Stg_Class_DeleteFunction*		_delete,
+	Stg_Class_PrintFunction*		_print, 
+	Stg_Class_CopyFunction*			_copy )
+{
+	Stg_ComponentRegister *self = NULL;
+
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Stg_ComponentRegister) );
+	self = (Stg_ComponentRegister*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+
+	return self;
+}
+	
+Stg_ComponentRegister *Stg_ComponentRegister_New(  )
+{
+	Stg_ComponentRegister *self = NULL;
+
+	if( stgComponentRegister == NULL ){
+		
+		self = _Stg_ComponentRegister_New( sizeof( Stg_ComponentRegister ),
+			Stg_ComponentRegister_Type,
+			_Stg_ComponentRegister_Delete,
+			_Stg_ComponentRegister_Print,
+			NULL );
+		Stg_ComponentRegister_Init( self );
+	}
+	else{
+		self = stgComponentRegister;
+	}
+
+	return self;
+}
+	
+/* Initialisation implementation */
+void _Stg_ComponentRegister_Init( Stg_ComponentRegister* self )
+{
+	assert( self );
+	
+	self->constructors = BTree_New(
+							constructorElementCompareFunction,
+							NULL,
+							constructorElementDeleteFunction,
+							constructorElementPrintFunction,
+							BTREE_NO_DUPLICATES);
+}
+	
+void Stg_ComponentRegister_Init( Stg_ComponentRegister* self )
+{
+	assert( self );
+	_Stg_ComponentRegister_Init( self );
+}
+	
+/* Delete boundary condition layout implementation */
+void _Stg_ComponentRegister_Delete( void* componentRegister )
+{
+	Stg_ComponentRegister *self = NULL;
+
+	self = (Stg_ComponentRegister*) componentRegister;
+	assert( self );
+
+	Stg_Class_Delete( self->constructors );
+	_Stg_Class_Delete( self );
+}
+	
+void _Stg_ComponentRegister_Print( void* componentRegister, Stream* stream )
+{
+	Stg_ComponentRegister *self = NULL;
+
+	self = ( Stg_ComponentRegister* ) componentRegister;
+
+	assert( self );
+	
+		/* General info */
+	Journal_Printf( (void*) stream, "Stg_ComponentRegister (ptr): %p\n", self );
+	_Stg_Class_Print( self, stream );
+	Journal_Printf( stream, "Constructors:\n" );
+	Stg_Class_Print( self->constructors, stream );
+}
+	
+/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+int Stg_ComponentRegister_AddFunc( 
+		Stg_ComponentRegister *self,
+		Name componentType,
+		Name version,
+		Stg_Component_DefaultConstructorFunction *func,
+		Stg_Component_Type_GetMetadataFunction* metadata )
+{
+	Stg_ComponentRegisterElement *element = NULL;
+
+	assert( self );
+	element = Memory_Alloc( Stg_ComponentRegisterElement, "Stg_ComponentRegisterElement" );
+
+	element->componentType = StG_Strdup( componentType );
+	element->defaultConstructor = func;
+	element->metadata = metadata;
+	element->version = StG_Strdup( version );
+
+	Journal_Firewall( BTree_InsertNode( self->constructors, (void*)element, sizeof( Stg_ComponentRegisterElement ) ),
+			Journal_Register( Error_Type, Stg_ComponentRegister_Type ), 
+			"Error in func %s: Attempting to enter duplicate constructors for type '%s' (version '%s').\n"
+			"This should only be done once per type.\n",
+			__func__, componentType, version );
+
+	return 1;
+}
+
+Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_Get( 
+		Stg_ComponentRegister* self,
+		Name                   componentType,
+		Name                   version ) 
+{
+	BTreeNode *node = NULL;
+	Stg_ComponentRegisterElement *element = NULL;
+	SearchCriteria sc;
+
+	assert( self );
+	
+	sc.type = componentType;
+	sc.version = version;
+	
+	BTree_SetCompareFunction( self->constructors, constructorElementCompareFunction1 );
+	node = BTree_FindNode( self->constructors, (void*)(&sc) );
+	BTree_SetCompareFunction( self->constructors, constructorElementCompareFunction );
+	if( node ){
+		element = (Stg_ComponentRegisterElement*) node->data;
+		if( element ){
+			return (void*) element->defaultConstructor;
+		}
+	}
+	
+	return NULL;
+}
+
+Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_AssertGet( 
+		Stg_ComponentRegister* self,
+		Name                   componentType,
+		Name                   version ) 
+{
+	Stg_Component_DefaultConstructorFunction* componentConstructorFunction;
+	
+	componentConstructorFunction = Stg_ComponentRegister_Get( self, componentType, version );
+
+	/* If we cannot find the default construct for this componentType - then abort() with a nice message */
+	if ( !componentConstructorFunction ) {
+		Stream* errorStream = Journal_Register( Error_Type, self->type );
+
+		Journal_Printf( errorStream, "Cannot find default constructor function for type '%s'\n", componentType );
+		Journal_Printf( errorStream, "Could you have meant one of these?\n" );
+
+		Stream_Indent( errorStream );
+		Stg_ComponentRegister_PrintSimilar( self, componentType, errorStream, 5 );
+		abort();
+	}	
+
+	return componentConstructorFunction;
+}
+
+Stg_Component_Type_GetMetadataFunction* Stg_ComponentRegister_GetMetadata(
+		Stg_ComponentRegister* self,
+		Name                   componentType,
+		Name                   version ) 
+{
+	BTreeNode *node = NULL;
+	Stg_ComponentRegisterElement *element = NULL;
+	SearchCriteria sc;
+
+	assert( self );
+
+	sc.type = componentType;
+	sc.version = version;
+
+	BTree_SetCompareFunction( self->constructors, constructorElementCompareFunction1 );
+	node = BTree_FindNode( self->constructors, (void*)(&sc) );
+	BTree_SetCompareFunction( self->constructors, constructorElementCompareFunction );
+
+	if( node ){
+		element = (Stg_ComponentRegisterElement*) node->data;
+		if( element ){
+			return (void*) element->metadata;
+		}
+	}
+
+	assert(0);
+
+	return NULL;
+}
+
+Stg_ComponentRegister *Stg_ComponentRegister_Get_ComponentRegister( )
+{
+	if( stgComponentRegister ){
+		return stgComponentRegister;
+	}
+	else{
+		return NULL;
+	}
+}
+
+/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+int constructorElementCompareFunction( void *data1, void *data2 )
+{
+	Stg_ComponentRegisterElement *d1 = NULL, *d2 = NULL;
+	char key[1024];
+	char key1[1024];
+
+	d1 = (Stg_ComponentRegisterElement*)data1;
+	d2 = (Stg_ComponentRegisterElement*)data2;
+
+	if (d1 == NULL || d2 == NULL){
+		return 0;	
+	}
+
+	memset( key, 0, sizeof( key ) );
+	memset( key1, 0, sizeof( key1 ) );
+	sprintf( key, "%s%s", d1->componentType, d1->version );
+	sprintf( key1, "%s%s", d2->componentType, d2->version );
+	
+	if (strcmp(key, key1) > 0){
+		return  1;
+	}
+	else if (!strcmp(key, key1)){
+		return 0;
+	}
+	else{
+		return -1;
+	}	
+}
+	
+int constructorElementCompareFunction1( void *data1, void *data2 )
+{
+	Stg_ComponentRegisterElement *d1 = NULL;
+	SearchCriteria *d2 = NULL;
+	char key[1024];
+	char key1[1024];
+
+	d1 = (Stg_ComponentRegisterElement*)data1;
+	d2 = (SearchCriteria*)data2;
+
+	if (d1 == NULL || d2 == NULL){
+		return 0;	
+	}
+	
+	memset( key, 0, sizeof( key ) );
+	memset( key1, 0, sizeof( key1 ) );
+	sprintf( key, "%s%s", d1->componentType, d1->version );
+	sprintf( key1, "%s%s", d2->type, d2->version );
+	
+	if (strcmp(key, key1) > 0){
+		return  1;
+	}
+	else if (!strcmp(key, key1)){
+		return 0;
+	}
+	else{
+		return -1;
+	}	
+}
+
+void constructorElementPrintFunction( void *nodeData, Stream *printStream )
+{
+	Stg_ComponentRegisterElement *element;
+	
+	assert( nodeData );
+
+	element = ( Stg_ComponentRegisterElement* ) nodeData;
+	Journal_Printf( printStream, "Constructor Information\n");
+	Journal_Printf( printStream, "\tStg_ComponentType                : %s\n", element->componentType );
+	Journal_Printf( printStream, "\tStg_Component Default Constructor: %p\n", element->defaultConstructor );
+	Journal_Printf( printStream, "\tVersion                      : %s\n", element->version );
+}
+
+void constructorElementDeleteFunction( void *nodeData )
+{
+	Stg_ComponentRegisterElement *element = NULL;
+
+	element = (Stg_ComponentRegisterElement*) nodeData;
+
+	if( element ){
+		Memory_Free( element->componentType );
+		Memory_Free( element->version );
+		Memory_Free( element );
+	}
+}
+
+typedef struct {
+	Type     type;
+	float    percentageSimilar;
+} Stg_ComponentRegister_SimilarityObject;
+
+typedef struct {
+	Name                                    nameToCompare;
+	Index                                   currentIndex;
+	Stg_ComponentRegister_SimilarityObject* array;
+} Stg_ComponentRegister_SimilarityList;
+
+int _Stg_ComponentRegister_SimilarityCompare( const void *ptr1, const void *ptr2 ) {
+	Stg_ComponentRegister_SimilarityObject* similarityPtr1 = (Stg_ComponentRegister_SimilarityObject*) ptr1;
+	Stg_ComponentRegister_SimilarityObject* similarityPtr2 = (Stg_ComponentRegister_SimilarityObject*) ptr2;
+
+	if ( similarityPtr1->percentageSimilar > similarityPtr2->percentageSimilar )
+		return -1;
+	else 
+		return 1;
+}
+
+void Stg_ComponentRegister_Similarity_Helper( void* nodeData, void* _list ) {
+	Stg_ComponentRegisterElement*           element       = (Stg_ComponentRegisterElement*) nodeData;
+	Stg_ComponentRegister_SimilarityList*   list          = (Stg_ComponentRegister_SimilarityList*) _list;
+	Type                                    componentType = element->componentType;
+	float                                   stringLength  = (float) strlen( list->nameToCompare );
+	float                                   typeLength    = (float) strlen( componentType );
+	Index                                   array_I       = list->currentIndex;
+	unsigned int                            substringLength;
+
+	substringLength = Stg_LongestMatchingSubsequenceLength( componentType, list->nameToCompare, False );
+	list->array[ array_I ].type = componentType;
+	list->array[ array_I ].percentageSimilar = (float) substringLength * 100.0 / MAX( typeLength, stringLength );
+
+	list->currentIndex++;
+}
+
+void Stg_ComponentRegister_PrintSimilar( void* componentRegister, Name name, void* _stream, unsigned int number ) {
+	Stg_ComponentRegister*                  self               = (Stg_ComponentRegister*) componentRegister;
+	Stream*                                 stream             = (Stream*)         _stream;
+	Stg_ComponentRegister_SimilarityList    similarityList;
+	Stg_ComponentRegister_SimilarityObject* similarityObject;
+	Index                                   type_I;
+	Index                                   count              = self->constructors->nodeCount;
+
+	similarityList.nameToCompare = name;
+	similarityList.currentIndex = 0;
+	similarityList.array = Memory_Alloc_Array( Stg_ComponentRegister_SimilarityObject, count, "similarityArray");
+
+	/* First parse the tree, calculating how similar the 'name' is to the types registered */
+	BTree_ParseTree( self->constructors, Stg_ComponentRegister_Similarity_Helper, &similarityList );
+
+	/* Sort list from most similar to least similar */
+	qsort( similarityList.array, (size_t)count, sizeof( Stg_ComponentRegister_SimilarityObject ), _Stg_ComponentRegister_SimilarityCompare );
+	
+	/* Print out the first 'number' in list */
+	if ( number > count )
+		number = count;
+	for ( type_I = 0 ; type_I < number ; type_I++ ) {
+		similarityObject = &similarityList.array[ type_I ];
+		Journal_Printf( stream, "%s (%.2f%% similar)\n", similarityObject->type, similarityObject->percentageSimilar );
+	}
+
+	Memory_Free( similarityList.array );
+}
+
+
+void constructorElementPrintTypeFunction( void* nodeData, void* printStream ) {
+	Stg_ComponentRegisterElement* element = ( Stg_ComponentRegisterElement* ) nodeData;
+	Stream*                       stream  = (Stream*) printStream;
+	
+	assert( nodeData );
+	assert( stream );
+
+	Journal_Printf( stream, "%s\n", element->componentType );
+}
+
+void Stg_ComponentRegister_PrintAllTypes( void* componentRegister, void* stream ) {
+	Stg_ComponentRegister*                  self               = (Stg_ComponentRegister*) componentRegister;
+
+	/* Parse the tree, printing all the names */
+	BTree_ParseTree( self->constructors, constructorElementPrintTypeFunction, stream );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Stg_ComponentRegister.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,145 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class for objects that are named.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: Stg_ComponentRegister.h 2745 2005-05-11 08:12:18Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Stg_ComponentRegister_h__
+#define __Base_Automation_Stg_ComponentRegister_h__
+	
+	/* Textual name of this class */
+	extern const Type Stg_ComponentRegister_Type;
+	extern Stg_ComponentRegister *stgComponentRegister;
+
+	typedef const char* (Stg_Component_Type_GetMetadataFunction) ( );
+	
+	/*struct Stg_Component_DefaultConstructorFunction;*/
+	#define __Stg_ComponentRegisterElement \
+		Type								componentType; \
+		Stg_Component_DefaultConstructorFunction*			defaultConstructor; \
+		Stg_Component_Type_GetMetadataFunction*                              metadata; \
+		Name								version;
+
+	struct Stg_ComponentRegisterElement{ __Stg_ComponentRegisterElement };
+	
+	/* Stg_ComponentRegister information */
+	#define __Stg_ComponentRegister \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_ComponentRegister info */ \
+		BTree									*constructors; \
+	
+	struct Stg_ComponentRegister { __Stg_ComponentRegister };
+	
+	/* Class Administration members ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	
+	/** Constructor Implementation */
+	Stg_ComponentRegister *_Stg_ComponentRegister_New(
+		SizeT					_sizeOfSelf, 
+		Type					type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print, 
+		Stg_Class_CopyFunction*			_copy );
+	
+	Stg_ComponentRegister *Stg_ComponentRegister_New(  );
+	
+	/* Initialisation implementation */
+	void _Stg_ComponentRegister_Init( Stg_ComponentRegister* self );
+	
+	void Stg_ComponentRegister_Init( Stg_ComponentRegister* self );
+	
+	/* Delete boundary condition layout implementation */
+	void _Stg_ComponentRegister_Delete( void* componentRegister );
+	
+	/* Print boundary condition layout implementation */
+	void _Stg_ComponentRegister_Print( void* componentRegister, Stream* stream );
+	
+	
+	/* Private member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	int constructorElementCompareFunction( void *data1, void *data2 );
+	
+	int constructorElementCompareFunction1( void *data1, void *data2 );
+	
+	void constructorElementPrintFunction( void *nodeData, Stream *printStream );
+
+	void constructorElementDeleteFunction( void *nodeData );
+	
+	/* Public member functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+	int Stg_ComponentRegister_AddFunc( 
+			Stg_ComponentRegister *self,
+			Name componentType,
+			Name version,
+			Stg_Component_DefaultConstructorFunction *func,
+			Stg_Component_Type_GetMetadataFunction* metadata );
+
+	#define Stg_ComponentRegister_Add( self, componentType, version, func ) \
+	{ \
+		const char* componentType ##_GetMetadata(); \
+		Stg_ComponentRegister_AddFunc( self, componentType, version, func, componentType ##_GetMetadata ); \
+	}
+
+	Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_Get( 
+			Stg_ComponentRegister* self,
+			Name                   componentType,
+			Name                   version );
+	
+	/* Same function as above, but it asserts and gives a nice message if it cannot find the default constructor */
+	Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_AssertGet( 
+			Stg_ComponentRegister* self,
+			Name                   componentType,
+			Name                   version ); 
+
+	Stg_Component_Type_GetMetadataFunction* Stg_ComponentRegister_GetMetadata(
+			Stg_ComponentRegister* self,
+			Name                   componentType,
+			Name                   version );
+
+	/** This function returns the pointer to the singleton "stgComponentRegister" */
+	Stg_ComponentRegister *Stg_ComponentRegister_Get_ComponentRegister( );
+
+	/** This function prints the types registered that are most similar to the 'name' passed in */
+	void Stg_ComponentRegister_PrintSimilar( void* componentRegister, Name name, void* _stream, unsigned int number ) ;
+
+	Stg_Component_DefaultConstructorFunction* Stg_ComponentRegister_AssertGet( 
+		Stg_ComponentRegister* self,
+		Name                   componentType,
+		Name                   version );
+	void Stg_ComponentRegister_PrintAllTypes( void* componentRegister, void* stream ) ;
+	
+#endif /* __Base_Automation_Stg_ComponentRegister_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1078 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Variable.c 3881 2006-10-26 03:14:19Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "LiveComponentRegister.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stdarg.h>
+#include <math.h>
+
+/* Textual name of this class */
+const Type Variable_Type = "Variable";
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Constructors
+*/
+
+Variable* Variable_New(
+		Name						name,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr )
+{
+	Variable*	self;
+	
+	self = _Variable_New( 
+		sizeof(Variable), 
+		Variable_Type, 
+		_Variable_Delete, 
+		_Variable_Print, 
+		_Variable_Copy,
+		(Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew,
+		_Variable_Construct,
+		_Variable_Build, 
+		_Variable_Initialise, 
+		_Variable_Execute, 
+		_Variable_Destroy,
+		name,
+		True,
+		dataCount, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		dataNames, 
+		structSizePtr, 
+		arraySizePtr,
+		arrayPtrPtr, 
+		vr );
+	
+	return self;
+}
+
+Variable* Variable_DefaultNew( Name name )
+{
+	Variable*	self;
+	
+	self = _Variable_New( 
+		sizeof(Variable), 
+		Variable_Type, 
+		_Variable_Delete, 
+		_Variable_Print, 
+		_Variable_Copy,
+		(Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew,
+		_Variable_Construct,
+		_Variable_Build, 
+		_Variable_Initialise, 
+		_Variable_Execute, 
+		_Variable_Destroy,
+		name,
+		False,
+		0, 
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL, 
+		NULL,
+		NULL, 
+		NULL );
+	
+	return self;
+}
+
+Variable* Variable_NewScalar( 
+		Name						name,
+		Variable_DataType				dataType,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr )
+{
+	Variable*		self;
+	SizeT			dataOffsets[] = { 0 };
+	Variable_DataType	dataTypes[] = { 0 };		/* Init value later */
+	Index			dataTypeCounts[] = { 1 };
+	
+	dataTypes[0] = dataType;
+	
+	self = _Variable_New( 
+		sizeof(Variable), 
+		Variable_Type, 
+		_Variable_Delete, 
+		_Variable_Print, 
+		_Variable_Copy,
+		(Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew,
+		_Variable_Construct,
+		_Variable_Build, 
+		_Variable_Initialise, 
+		_Variable_Execute,
+		_Variable_Destroy,
+		name,
+		True,
+		1, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		0, /* no component names */
+		0, /* means work out from dataType at build phase */
+		arraySizePtr,
+		arrayPtrPtr, 
+		vr );
+	
+	return self;
+}
+
+Variable* Variable_NewVector( 
+		Name						name,
+		Variable_DataType				dataType,
+		Index						dataTypeCount,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr,
+		... 						/* vector component names */ )
+{
+	Variable*		self;
+	SizeT			dataOffsets[] = { 0 };
+	Variable_DataType	dataTypes[] = { 0 };				/* Init later... */
+	Index			dataTypeCounts[] = { 0 };			/* Init later... */
+	Name*			dataNames;
+	Index			vector_I;
+	va_list			ap;
+
+	dataTypes[0] = dataType;
+	dataTypeCounts[0] = dataTypeCount;
+
+	dataNames = Memory_Alloc_Array( Name, dataTypeCount, "dataNames" );
+
+	va_start( ap, vr );
+	for( vector_I = 0; vector_I < dataTypeCount; vector_I++ ) {
+		dataNames[vector_I] = va_arg( ap, Name );
+	}
+	va_end( ap );
+	
+	self = _Variable_New( 
+		sizeof(Variable), 
+		Variable_Type, 
+		_Variable_Delete, 
+		_Variable_Print, 
+		_Variable_Copy, 
+		(Stg_Component_DefaultConstructorFunction*)Variable_DefaultNew,
+		_Variable_Construct,
+		_Variable_Build, 
+		_Variable_Initialise, 
+		_Variable_Execute, 
+		_Variable_Destroy,
+		name,
+		True,
+		1, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		dataNames,
+		0, /* means work out from dataType at build phase */
+		arraySizePtr,
+		arrayPtrPtr, 
+		vr );
+
+	Memory_Free( dataNames );
+	
+	return self;
+}
+
+
+void Variable_Init(
+		Name						name,
+		Variable*					self,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Bool						allocateSelf,
+		Variable_Register*				vr )
+{
+	/* General info */
+	self->type = Variable_Type;
+	self->_sizeOfSelf = sizeof(Variable);
+	self->_deleteSelf = False;
+		
+	/* Virtual info */
+	self->_delete = _Variable_Delete;
+	self->_print = _Variable_Print;
+	self->_copy = _Variable_Copy;
+	self->_build = _Variable_Build;
+	self->_initialise = _Variable_Initialise;
+	self->_execute = _Variable_Execute;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	/* Variable info */
+	_Variable_Init( 
+		self, 
+		dataCount, 
+		dataOffsets, 
+		dataTypes, 
+		dataTypeCounts, 
+		dataNames, 
+		structSizePtr,
+		arraySizePtr,
+		arrayPtrPtr, 
+		allocateSelf,
+		vr );
+}
+
+
+Variable* _Variable_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*		_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*			_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name						name,
+		Bool						initFlag,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr )
+{
+	Variable*	self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(Variable) );
+	self = (Variable*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+										_construct, _build, _initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* General info */
+	
+	/* Virtual info */
+	self->_build = _build;
+	self->_initialise = _initialise;
+	
+	/* Variable info */
+	if( initFlag ){
+		_Variable_Init( 
+			self, 
+			dataCount, 
+			dataOffsets, 
+			dataTypes, 
+			dataTypeCounts, 
+			dataNames, 
+			structSizePtr, 
+			arraySizePtr,
+			arrayPtrPtr, 
+			False,
+			vr );
+	}
+	
+	return self;
+}
+
+void _Variable_Init(
+		Variable*					self, 
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Bool                        allocateSelf,
+		Variable_Register*				vr )
+{
+	/* General and Virtual info should already be set */
+	
+	/* Variable info */
+	self->isConstructed = True;
+	self->allocateSelf  = allocateSelf;
+	self->offsetCount = dataCount;
+	self->structSizePtr = structSizePtr;
+	self->arraySizePtr = arraySizePtr;
+	self->arrayPtrPtr = arrayPtrPtr;
+
+	/* Use of this class has increased... can't assume the info arrays are on persistant memory... copy by default. They will
+	   be deleted. */
+	Journal_Firewall( dataOffsets ? True : False, Journal_Register( Error_Type, Variable_Type ), "dataOffsets is null\n" );
+	self->offsets = Memory_Alloc_Array( SizeT, self->offsetCount, "Variable->offsets" );
+	memcpy( self->offsets, dataOffsets, sizeof(SizeT) * self->offsetCount );
+	
+	Journal_Firewall( dataTypes ? True : False, Journal_Register( Error_Type, Variable_Type ), "dataTypes is null\n" );
+	self->dataTypes = Memory_Alloc_Array( Variable_DataType, self->offsetCount, "Variable->dataTypes" );
+	memcpy( self->dataTypes, dataTypes, sizeof(Variable_DataType) * self->offsetCount );
+	
+	Journal_Firewall( 
+		dataTypeCounts ? True : False , 
+		Journal_Register( Error_Type, Variable_Type ), 
+		"dataTypeCounts is null\n" );
+	self->dataTypeCounts = Memory_Alloc_Array( Index, self->offsetCount, "Variable->dataTypeCounts" );
+	memcpy( self->dataTypeCounts, dataTypeCounts, sizeof(Index) * self->offsetCount );
+	
+	/* These get set at the build phase (when we assume the variable's data memory has been allocated) */
+	self->structSize = 0;
+	self->arrayPtr = 0;
+	self->dataSizes = 0;
+	
+	if ( dataNames && self->offsetCount == 1 && self->dataTypeCounts[0] > 1 ) {
+		/* Vector case */
+		self->components = Memory_Alloc_Array( Variable*, self->dataTypeCounts[0], "Variable->components" );
+		memset( self->components, 0, sizeof(Variable*) * self->dataTypeCounts[0] );
+	}
+	else {
+		/* Scalar or Complex case */
+		self->components = Memory_Alloc_Array( Variable*, self->offsetCount, "Variable->components" );
+		memset( self->components, 0, sizeof(Variable*) * self->offsetCount );
+	}
+	
+	/* If the variable register is provided, add this and component variable(s) to the register */
+	if( vr ) {
+		self->vr = vr;
+		Variable_Register_Add( vr, self );
+		
+		/* If we have component names, create the associated variables. Don't do if there is only one component. */
+		if( dataNames && self->offsetCount > 1 ) {
+			Index			component_I;
+			
+			for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+				if( dataNames[component_I] ) {
+					SizeT			componentOffsets[] = { 0 };
+					Variable_DataType	componentTypes[] = { 0 };
+					Index			componentTypeCounts[] = { 0 };
+
+					componentOffsets[0] = self->offsets[component_I];
+					componentTypes[0] = self->dataTypes[component_I];
+					componentTypeCounts[0] = self->dataTypeCounts[component_I];
+					
+					/* Assumption: components are scalar or vector, but cannot be complex */
+					self->components[component_I] = Variable_New( 
+						dataNames[component_I], 
+						1, 
+						componentOffsets, 
+						componentTypes, 
+						componentTypeCounts,
+						0,
+						self->structSizePtr,
+						self->arraySizePtr,
+						self->arrayPtrPtr,
+						vr );
+				}
+			}
+		}
+		/* Else if we have vector-component names, create the associated variables. Do only if non-complex and a vector. */
+		else if( dataNames && self->offsetCount == 1 && self->dataTypeCounts[0] > 1 ) {
+			Index			vector_I;
+
+			for( vector_I = 0; vector_I < self->dataTypeCounts[0]; vector_I++ ) {
+				if( dataNames[vector_I] ) {
+					/* Unfortunately we cannot call any of our fancy macros here as the array is not resolved
+					 * yet. As a consequence we have to manually work out the vector's indecis offsets. Ouch
+					 * only from a code-maintenance point of view. */
+					SizeT			componentOffsets[] = { 0 };		/* Init later... */
+					Variable_DataType	componentTypes[] = { 0 };		/* Init later... */
+					Index			componentTypeCounts[] = { 1 };
+				
+					componentOffsets[0] = 
+						(ArithPointer)self->offsets[0] + 
+						( self->dataTypes[0] == Variable_DataType_Char ? ( sizeof(char) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Short ? ( sizeof(short) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Int ? ( sizeof(int) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Float ? ( sizeof(float) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Double ? ( sizeof(double) * vector_I ) :
+						  self->dataTypes[0] == Variable_DataType_Pointer ? ( sizeof(void*) * vector_I ) :
+						  Journal_Firewall(
+							0,
+							Journal_Register( Error_Type, Variable_Type ),
+							"Vector is of a non-builtin type\n" ) );
+					componentTypes[0] = self->dataTypes[0];
+
+							
+					/* Assumption: vector-components are scalar, but cannot be complex */
+					self->components[vector_I] = Variable_New( 
+						dataNames[vector_I],
+						1, 
+						componentOffsets, 
+						componentTypes, 
+						componentTypeCounts,
+						0,
+						self->structSizePtr,
+						self->arraySizePtr,
+						self->arrayPtrPtr,
+						vr );
+				}
+			}
+		}
+	}
+	else {
+		self->vr = NULL;
+	}
+}
+
+
+/*----------------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _Variable_Delete( void* variable ) {
+	Variable*	self = (Variable*)variable;
+
+	if ( self->dataSizes ) {
+		Memory_Free( self->dataSizes );
+	}
+	if (self->allocateSelf) {
+		Memory_Free( self->arrayPtr );
+	}
+	
+	Memory_Free( self->dataTypeCounts );
+	Memory_Free( self->dataTypes );
+	Memory_Free( self->offsets );
+	Memory_Free( self->components );
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _Variable_Print( void* variable, Stream* stream ) {
+	Variable*	self = (Variable*)variable;
+	Index		component_I;
+	
+	/* Print parent */
+	_Stg_Component_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream, "Variable (ptr): (%p)\n", self );
+	
+	/* Virtual info */
+	
+	/* Variable info */
+	Journal_Printf( stream, "\toffsetCount: %u\n", self->offsetCount );
+	
+	Journal_Printf( stream, "\toffsets (ptr): %p\n", self->offsets );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		Journal_Printf( stream, "\t\toffsets[%u]: %lu\n", component_I, self->offsets[component_I] );
+	}
+	
+	Journal_Printf( stream, "\tdataTypes (ptr): %p\n", self->dataTypes );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		Journal_Printf( stream, "\t\tdataTypes[%u]: %lu\n", component_I, self->dataTypes[component_I] );
+	}
+	
+	Journal_Printf( stream, "\tdataTypeCounts (ptr): %p\n", self->dataTypeCounts );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		Journal_Printf( stream, "\t\tdataTypeCounts[%u]: %lu\n", component_I, self->dataTypeCounts[component_I] );
+	}
+
+	Journal_Printf( stream, "\tdataSizes (ptr): %p\n", self->dataSizes );
+	for( component_I = 0; component_I < self->offsetCount && self->dataSizes; component_I++ ) {
+		Journal_Printf( stream, "\t\tdataSizes[%u]: %lu\n", component_I, self->dataSizes[component_I] );
+	}
+
+	Journal_Printf( stream, "\tcomponents (ptr): %p\n", self->components );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		Journal_Printf( stream, "\t\tcomponents[%u] (ptr): %p\n", component_I, self->components[component_I] );
+		if( self->components[component_I] ) {
+			Journal_Printf( stream, "\t\tcomponents[%u]: %s\n", component_I, self->components[component_I]->name );
+		}
+	}
+
+	Journal_Printf( stream, "\tstructSize: %lu\n", self->structSize );
+	Journal_Printf( stream, "\tstructSizePtr (ptr): %p\n", self->structSizePtr );
+
+	Journal_Printf( stream, "\tarrayPtr (ptr): %p\n", self->arrayPtr );
+	Journal_Printf( stream, "\tarrayPtrPtr (ptr): %p\n", self->arrayPtrPtr );
+
+	Journal_Printf( stream, "\tarraySize: %lu\n", self->arraySize );
+	Journal_Printf( stream, "\tarraySizePtr (ptr): %p\n", self->arraySizePtr );
+
+	Journal_Printf( stream, "\tallocateSelf = %s\n", self->allocateSelf ? "True" : "False" );
+}
+
+
+void* _Variable_Copy( void* variable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Variable*	self = (Variable*)variable;
+	Variable*	newVariable;
+	PtrMap*		map = ptrMap;
+	
+	newVariable = (Variable*)_Stg_Component_Copy( self, dest, deep, nameExt, map );
+	PtrMap_Append( map, self, newVariable );
+	
+	/* virtual methods */
+	newVariable->offsetCount = self->offsetCount;
+	newVariable->structSize = self->structSize;
+	newVariable->arraySize = self->arraySize;
+	
+	newVariable->allocateSelf = self->allocateSelf; /* This may change depending on whether arrayPtr is found in map */
+
+	/* single valued members */
+	
+	if( deep ) {
+		if( (newVariable->offsets = PtrMap_Find( map, self->offsets )) == NULL && self->offsets != NULL ) {
+			newVariable->offsets = Memory_Alloc_Array( SizeT, newVariable->offsetCount, "Variable->offsets" );
+			memcpy( newVariable->offsets, self->offsets, sizeof(SizeT) * newVariable->offsetCount );
+			PtrMap_Append( map, self->offsets, newVariable->offsets );
+		}
+		
+		if( (newVariable->dataTypes = PtrMap_Find( map, self->dataTypes )) == NULL && self->offsets != NULL ) {
+			newVariable->dataTypes = Memory_Alloc_Array( Variable_DataType, newVariable->offsetCount, "Variable->dataTypes" );
+			memcpy( newVariable->dataTypes, self->dataTypes, sizeof(Variable_DataType) * newVariable->offsetCount );
+			PtrMap_Append( map, self->dataTypes, newVariable->dataTypes );
+		}
+		
+		if( (newVariable->dataTypeCounts = PtrMap_Find( map, self->dataTypeCounts )) == NULL && self->dataTypeCounts != NULL ) {
+			newVariable->dataTypeCounts = Memory_Alloc_Array( Index, newVariable->offsetCount, "Variable->dataTypeCounts" );
+			memcpy( newVariable->dataTypeCounts, self->dataTypeCounts, sizeof(Index) * newVariable->offsetCount );
+			PtrMap_Append( map, self->dataTypeCounts, newVariable->dataTypeCounts );
+		}
+		
+		if ( self->structSizePtr != NULL ) {
+			if( (newVariable->structSizePtr = PtrMap_Find( map, self->structSizePtr )) == NULL ) {
+				newVariable->structSizePtr = Memory_Alloc_Array( 
+					SizeT, 
+					1, 
+					"Variable->structSizePtr" );
+				memcpy( newVariable->structSizePtr, self->structSizePtr, sizeof(SizeT) );
+				PtrMap_Append( map, self->structSizePtr, newVariable->structSizePtr );
+			}
+		}
+		else {
+			newVariable->structSizePtr = NULL;
+		}
+		
+		if ( self->arraySizePtr != NULL ) {
+			if( (newVariable->arraySizePtr = PtrMap_Find( map, self->arraySizePtr )) == NULL ) {
+				newVariable->arraySizePtr = Memory_Alloc_Array(
+					Index,
+					1,
+					"Variable->arraySizePtr" );
+				memcpy( newVariable->arraySizePtr, self->arraySizePtr, sizeof(Index) );
+				PtrMap_Append( map, self->arraySizePtr, newVariable->arraySizePtr );
+			}
+		}
+		else {
+			newVariable->arraySizePtr = NULL;
+		}
+		
+		if( (newVariable->dataSizes = PtrMap_Find( map, self->dataSizes )) == NULL && self->dataSizes != NULL ) {
+			newVariable->dataSizes = Memory_Alloc_Array( SizeT, newVariable->offsetCount, "Variable->dataSizes" );
+			memcpy( newVariable->dataSizes, self->dataSizes, sizeof(SizeT) * newVariable->offsetCount );
+			PtrMap_Append( map, self->dataSizes, newVariable->dataSizes );
+		}
+
+		if( (newVariable->arrayPtrPtr = PtrMap_Find( map, self->arrayPtrPtr )) == NULL && self->arrayPtrPtr != NULL ) {	
+			if( (newVariable->arrayPtr = PtrMap_Find( map, self->arrayPtr )) == NULL && self->arrayPtr != NULL ) {
+				Index memoryToAllocSize = self->arraySize * self->structSize;
+				newVariable->arrayPtr = Memory_Alloc_Bytes( 
+					memoryToAllocSize,
+					Variable_Type,
+					"SelfAllocedArray" );
+				memcpy( newVariable->arrayPtr, self->arrayPtr, memoryToAllocSize );
+				PtrMap_Append( map, self->arrayPtr, newVariable->arrayPtr );
+
+				newVariable->arrayPtrPtr = &(newVariable->arrayPtr);
+				newVariable->allocateSelf = True;
+			}
+		}
+		else {
+			newVariable->arrayPtr = *newVariable->arrayPtrPtr;
+			memcpy( newVariable->arrayPtr, self->arrayPtr, self->arraySize * self->structSize );
+		}
+		
+		if( (newVariable->components = PtrMap_Find( map, self->components )) == NULL && self->components != NULL ) {
+			Index	comp_I;
+			
+			if( newVariable->offsetCount == 1 && newVariable->dataTypeCounts[0] > 1 ) {
+				/* Vector case */
+				newVariable->components = Memory_Alloc_Array( 
+					Variable*, 
+					newVariable->dataTypeCounts[0], 
+					"Variable->components" );
+				memset( newVariable->components, 0, sizeof(Variable*) * newVariable->dataTypeCounts[0] );
+				
+				for( comp_I = 0; comp_I < newVariable->dataTypeCounts[0]; comp_I++ ) {
+					newVariable->components[comp_I] = (Variable*)Stg_Class_Copy( 
+						self->components[comp_I], 
+						NULL, 
+						deep, 
+						nameExt, 
+						map );
+				}
+			}
+			else {
+				/* Scalar or Complex case */
+				newVariable->components = Memory_Alloc_Array( 
+					Variable*, 
+					newVariable->offsetCount, 
+					"Variable->components" );
+				memset( newVariable->components, 0, sizeof(Variable*) * newVariable->offsetCount );
+				
+				for( comp_I = 0; comp_I < newVariable->offsetCount; comp_I++ ) {
+					if ( self->components[comp_I] ) {
+						newVariable->components[comp_I] = (Variable*)Stg_Class_Copy( 
+							self->components[comp_I], 
+							NULL, 
+							deep, 
+							nameExt, 
+							map );
+					}
+				}
+			}
+			
+			PtrMap_Append( map, self->components, newVariable->components );
+		}
+
+		if ( self->vr ) {
+			newVariable->vr = Stg_Class_Copy( self->vr, NULL, deep, nameExt, map );
+		}
+	}
+	else {
+		fprintf( stderr, "Warning: please don't shallow copy variables yet...or ever!\n" );
+	}
+	
+	return (void*)newVariable;
+}
+
+
+void _Variable_Build( void* variable, void* data ) {
+	Variable*	self = (Variable*)variable;
+	Index 		component_I;
+	
+	/* Obtain the actual array size, and array pointer */
+	Journal_Firewall( 
+		self->arraySizePtr ? True : False, 
+		Journal_Register( Error_Type, Variable_Type ), 
+		"arraySizePtr is null\n" );
+	self->arraySize = *self->arraySizePtr;
+
+
+	/* Work out the actual data sizes from the data types */
+	if( self->dataSizes ) {
+		Memory_Free( self->dataSizes );
+	}
+	self->dataSizes = Memory_Alloc_Array( SizeT, self->offsetCount, "Variable->dataSizes" );
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		switch ( self->dataTypes[component_I] ) {
+			case Variable_DataType_Variable:
+				Journal_Firewall( 
+					self->dataTypes[component_I] != Variable_DataType_Variable, 
+					Journal_Register( Error_Type, Variable_Type ),
+					"\"dataType[?] == Variable_DataType_Variables\" not yet implemented\n" );
+				break;
+			case Variable_DataType_Char:
+				self->dataSizes[component_I] = sizeof( char ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Short:
+				self->dataSizes[component_I] = sizeof( short ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Int:
+				self->dataSizes[component_I] = sizeof( int ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Float:
+				self->dataSizes[component_I] = sizeof( float ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Double:
+				self->dataSizes[component_I] = sizeof( double ) * self->dataTypeCounts[component_I];
+				break;
+			case Variable_DataType_Pointer:
+				self->dataSizes[component_I] = sizeof( void* ) * self->dataTypeCounts[component_I];
+				break;
+			default:
+				Journal_Firewall( 
+					self->dataTypes[component_I] >= Variable_DataType_Size, 
+					Journal_Register( Error_Type, Variable_Type ),
+					"\"dataType[?]\" is unrecognised\n" );
+				break;
+		}
+	}		
+	
+	/* Non-complex variables: Scalar & Vector can workout struct size for themselves.
+	 * Now that we know all the data sizes, work out the actual struct size (which may need the data sizes) */
+	if( self->offsetCount == 1 && !self->structSizePtr ) {
+		/* Vector and Scalars which are not apart of a Vector can work out their own size */
+		if ( self->structSize == 0 ) {
+			self->structSize = self->dataSizes[0];
+		}
+
+		/* If this is a vector, set its sub variables to the same struct size */
+		if ( self->dataTypeCounts[0] > 1 ) {
+			int subVariable_I;
+			for ( subVariable_I = 0; subVariable_I < self->dataTypeCounts[0]; ++subVariable_I ) {
+				if ( self->components[subVariable_I] ) {
+					self->components[subVariable_I]->structSize = self->structSize;
+				}
+				else
+					/* break here because if one subVariable isn't allocated - then the rest shouldn't be */
+					break;
+			}
+		}
+	}
+	else {
+		Journal_Firewall( 
+			self->structSizePtr ? True: False, 
+			Journal_Register( Error_Type, Variable_Type ), 
+			"structSizePtr is null\n" );
+		self->structSize = *self->structSizePtr;
+	}
+	
+	if (self->allocateSelf) {
+		Index memoryToAllocSize = self->arraySize * self->structSize;
+		Index subVariable_I;
+
+		Journal_Firewall( self->offsetCount == 1, 
+				Journal_Register( Error_Type, Variable_Type ), 
+				"Variable '%s' has 'offsetCount = %u', which should be 1 for self allocation.\n", 
+				self->name, self->offsetCount );
+
+		self->arrayPtr = Memory_Alloc_Bytes( memoryToAllocSize, Variable_Type, "SelfAllocedArray" );
+		memset( self->arrayPtr, 0, memoryToAllocSize );
+		
+		/* If this is a vector then set arrayPtr to be the same */
+		if ( self->dataTypeCounts[0] > 1 ) {
+			for ( subVariable_I = 0 ; subVariable_I < self->dataTypeCounts[0] ; subVariable_I++ ) {
+				if ( self->components[subVariable_I] )
+					self->components[ subVariable_I ]->arrayPtr = self->arrayPtr;
+				else
+					/* break here because if one subVariable isn't allocated - then the rest shouldn't be */
+					break;
+			}
+		}
+	}
+	else {
+		Journal_Firewall( 
+			self->arrayPtrPtr ? True : False, 
+			Journal_Register( Error_Type, Variable_Type ), 
+			"Variable '%s' has NULL arrayPtrPtr\n", self->name );
+		self->arrayPtr = *self->arrayPtrPtr;
+	}
+}
+
+
+void _Variable_Initialise( void* variable, void* data ) {
+}
+
+
+void _Variable_Execute( void* variable, void* data ) {
+}
+
+void _Variable_Construct( void* variable, Stg_ComponentFactory* cf, void* data ) {
+	Variable*           self              = (Variable*) variable;
+	SizeT			    dataOffsets[]     = { 0 };
+	Variable_DataType	dataTypes[]       = { 0 };		/* Init value later */
+	Index			    dataTypeCounts[]  = { 1 };
+	Dictionary *        componentDict     = NULL;
+	Dictionary *        thisComponentDict = NULL;
+	Name                dataTypeName      = NULL;
+	Name                rankName          = NULL;
+	Name                countName         = NULL;
+	unsigned int*       count             = NULL;
+	void *              variableRegister  = NULL;
+	void *              pointerRegister   = NULL;
+	Name*               names             = NULL;
+	Stream*             error             = Journal_Register( Error_Type, self->type );
+	
+	assert( self );
+
+	componentDict = cf->componentDict;
+	assert( componentDict );
+	thisComponentDict = Dictionary_GetDictionary( componentDict, self->name );
+	assert( thisComponentDict );
+	
+	/* Grab Registers */
+	variableRegister = Stg_ObjectList_Get( cf->registerRegister, "Variable_Register" );
+	assert( variableRegister );
+	pointerRegister = Stg_ObjectList_Get( cf->registerRegister, "Pointer_Register" );
+	assert( pointerRegister );
+	
+	Stg_ComponentFactory_ConstructByKey( cf, self->name, "Dependency", Stg_Component, False, data );
+			
+	/* Get Pointer to number of elements in array */
+	countName = Dictionary_GetString( thisComponentDict, "Count" );
+	count = Stg_ObjectList_Get( pointerRegister, countName );
+	assert( count );
+	
+	/* Get Type of Variable */
+	dataTypeName = Dictionary_GetString( thisComponentDict, "DataType" );
+	if ( !strcasecmp( dataTypeName, "Double" ) )
+		dataTypes[0] = Variable_DataType_Double;
+	else if ( !strcasecmp( dataTypeName, "Float" ) )
+		dataTypes[0] = Variable_DataType_Float;
+	else if ( !strcasecmp( dataTypeName, "Int" ) )
+		dataTypes[0] = Variable_DataType_Int;
+	else if ( !strcasecmp( dataTypeName, "Char" ) )
+		dataTypes[0] = Variable_DataType_Char;
+	else if ( !strcasecmp( dataTypeName, "Short" ) )
+		dataTypes[0] = Variable_DataType_Short;
+	else 
+		Journal_Firewall( False, error, "Variable '%s' cannot understand data type '%s'\n", self->name, dataTypeName );
+
+	/* Get Rank of Variable - i.e. Scalar or Vector */
+	rankName = Dictionary_GetString( thisComponentDict, "Rank" );
+	if( !strcasecmp( rankName, "Scalar" ) ){
+		dataTypeCounts[0] = 1;
+	}
+	else if ( !strcasecmp( rankName, "Vector" ) ){
+		Dictionary_Entry_Value* list;
+		Index                   nameCount = 0;
+
+		/* Get Names from list */
+		if (( list = Dictionary_Get( thisComponentDict, "names" ) )) {
+			Index entry_I;
+
+			nameCount = Dictionary_Entry_Value_GetCount( list );
+			names = Memory_Alloc_Array( Name, nameCount, "Variable Names" );
+
+			for ( entry_I = 0 ; entry_I < nameCount ; entry_I++ )
+				names[ entry_I ] = Dictionary_Entry_Value_AsString( Dictionary_Entry_Value_GetElement(list, entry_I ) );
+		}
+		dataTypeCounts[0] = Stg_ComponentFactory_GetUnsignedInt( cf, self->name, "VectorComponentCount", nameCount );
+
+		Journal_Firewall( nameCount >= dataTypeCounts[0], error,
+				"Variable '%s' has too few names in list for %d vector components.\n", self->name, dataTypeCounts[0] );
+	}
+	else
+		Journal_Firewall( False, error, "Variable '%s' cannot understand rank '%s'\n", self->name, rankName );
+
+	_Variable_Init( 
+			self, 
+			1, 
+			dataOffsets,
+			dataTypes,
+			dataTypeCounts, 
+			names, 
+			0, 
+			count, 
+			(void**)&self->arrayPtr,
+			True,
+			variableRegister );
+
+	/* Clean Up */
+	if (names)
+		Memory_Free(names);
+}
+	
+void _Variable_Destroy( void* variable, void* data )
+{
+	
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Public Functions
+*/
+
+void Variable_SetValue( void* variable, Index array_I, void* value ) {
+	Variable*	self = (Variable*)variable;
+	ArithPointer*	vPtr;
+	Index		component_I;
+	
+	vPtr = value;
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		memcpy( _Variable_GetPtr( self, array_I, component_I, 0 ), (void*)vPtr, self->dataSizes[component_I] );
+		
+		vPtr += self->dataSizes[component_I];
+	}
+}
+
+
+void Variable_GetValue( void* variable, Index array_I, void* value ) {
+	Variable*	self = (Variable*)variable;
+	ArithPointer*	vPtr;
+	Index		component_I;
+	
+	vPtr = value;
+	for( component_I = 0; component_I < self->offsetCount; component_I++ ) {
+		memcpy( (void*)vPtr, _Variable_GetPtr( self, array_I, component_I, 0 ), self->dataSizes[component_I] );
+		
+		vPtr += self->dataSizes[component_I];
+	}
+}
+
+void Variable_Update( void* variable ) {
+	Variable* self = (Variable*)variable;
+
+	/* array may have resized, assign local properties again */
+	self->arrayPtr = *self->arrayPtrPtr;
+	self->arraySize = *self->arraySizePtr;
+	
+	if( !( self->offsetCount == 1 && !self->structSizePtr ) ) {
+		/* For non-scalar or non-vector variables, the targets may have been extended. */
+		self->structSize = *self->structSizePtr;
+	}
+}
+
+void Variable_SetValueDoubleAll( void* variable, double value ) {
+	Variable* self       = (Variable*)  variable;
+	Index     arraySize  = self->arraySize;
+	Index     array_I;
+
+	for ( array_I = 0 ; array_I < arraySize ; array_I++ ) 
+		Variable_SetValueDouble( self, array_I, value );
+}
+		
+
+void Variable_SaveToFileAsDoubles( void* variable, char* filename ) {
+	Variable* self       = (Variable*)  variable;
+	Index     arraySize  = self->arraySize;
+	Index     array_I;
+	double    value;
+	FILE*     outputFile;
+	Index     comp_I;
+
+	outputFile = fopen( filename, "w" );
+
+	for ( array_I = 0 ; array_I < arraySize ; array_I++ ) {
+		if ( *self->dataTypeCounts > 1 ) {
+			for ( comp_I = 0; comp_I < *self->dataTypeCounts; comp_I++ ) {	
+				value = Variable_GetValueAtDouble( self, array_I, comp_I );
+				fwrite( &value, sizeof(double), 1, outputFile );
+			}
+		}
+		else {
+			value = Variable_GetValueDouble( self, array_I );
+			fwrite( &value, sizeof(double), 1, outputFile );
+		}	
+	
+	}	
+
+	fclose( outputFile );
+}
+
+
+void Variable_ReadFromFileAsDoubles( void* variable, char* filename ) {
+	Variable* self       = (Variable*)  variable;
+	Index     arraySize  = self->arraySize;
+	Index     array_I;
+	double    value;
+	FILE*     inputFile;
+	Index     comp_I;
+
+	inputFile = fopen( filename, "r" );
+
+	for ( array_I = 0 ; array_I < arraySize ; array_I++ ) {
+		if ( *self->dataTypeCounts > 1 ) {
+			for ( comp_I = 0; comp_I < *self->dataTypeCounts; comp_I++ ) {	
+				fread( &value, sizeof(double), 1, inputFile );
+				Variable_SetValueAtDouble( self, array_I, comp_I, value );
+			}
+		}
+		else {
+			fread( &value, sizeof(double), 1, inputFile );
+			Variable_SetValueDouble( self, array_I, value );
+		}
+	}	
+
+	fclose( inputFile );
+}
+
+
+/** Returns || variable - comparison || / || variable ||, 
+  * where ||x|| indicates the Euclidean Norm which is the square root of the sum of the squares for each component in x
+  * i.e.  ||x|| = \sqrt{\sum_i x_i^2}*/
+double Variable_ValueCompare( void* variable, void* _comparison ) {
+	Variable* self            = (Variable*)  variable;
+	Variable* comparison      = (Variable*) _comparison;
+	Index     arraySize       = self->arraySize;
+	Index     dataTypeCounts  = *self->dataTypeCounts;
+	Index     array_I;
+	Index     component_I;
+	double    differenceValue;
+	double    selfValue;
+	double    normDifference  = 0.0;
+	double    normVariable    = 0.0;
+	Stream*   error           = Journal_Register( Error_Type, self->type );
+
+	/* Simple Error Checking */
+	Journal_Firewall( arraySize == comparison->arraySize, error, 
+			"In func %s: Array sizes different for variables '%s' and '%s'\n", __func__, self->name, comparison->name );
+	Journal_Firewall( dataTypeCounts == *comparison->dataTypeCounts, error, 
+			"In func %s: Data Type Counts different for variables '%s' and '%s'\n",  __func__, self->name,comparison->name);
+
+	for ( component_I = 0 ; component_I < self->offsetCount ; component_I++ ) {
+		Journal_Firewall( self->dataTypes[component_I] == Variable_DataType_Double, error, 
+				"In func %s: Stg_Component %d of variable '%s' has different type to Variable_DataType_Double.\n", 
+				 __func__, component_I, self->name );
+		Journal_Firewall( comparison->dataTypes[component_I] == Variable_DataType_Double, error, 
+				"In func %s: Stg_Component %d of variable '%s' has different type to Variable_DataType_Double.\n", 
+				 __func__, component_I, comparison->name );
+	}
+
+	/* Calculate Euclidean Norms */
+	for ( array_I = 0 ; array_I < arraySize ; array_I++ ) {
+		for ( component_I = 0 ; component_I < dataTypeCounts ; component_I++ ) {
+			selfValue       = Variable_GetValueAtDouble( self, array_I, component_I );
+			differenceValue = selfValue - Variable_GetValueAtDouble( comparison, array_I, component_I );
+
+			normDifference += differenceValue * differenceValue;
+			normVariable   += selfValue * selfValue;
+		}
+	}
+
+	normDifference = sqrt( normDifference );
+	normVariable   = sqrt( normVariable );
+
+	return normDifference/normVariable;
+}
+
+/** Checks whether || variable - comparison || / || variable || < tolerance */
+Bool Variable_ValueCompareWithinTolerance( void* variable, void* comparison, double tolerance ) {
+	return ( Variable_ValueCompare( variable, comparison ) < tolerance );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,1178 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**	A Variable associates a textual name to a field(s) in an array of structures.
+**
+** <b>Assumptions:</b>
+**	None
+**
+** <b>Comments:</b>
+**	None
+**
+** <b>Description</b>
+**	Variable is used to group a field of a structure inside an array so that functions and algorithms can be solely
+**	applied to this member. This allows more dynamic library routines possible.
+**
+**	For example in an array of coordinates {x, y, z} a Variable can be created to represent "x".
+**
+**	Note that Variables can be applied to any piece of contiguous memory.
+**
+** $Id: Variable.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_Automation_Variable_h__
+#define __Base_Automation_Variable_h__
+	
+	/** Textual name for Variable class. */
+	extern const Type Variable_Type;
+
+	typedef enum {
+		Variable_DataType_Variable,
+		Variable_DataType_Char,
+		Variable_DataType_Short,
+		Variable_DataType_Int,
+		Variable_DataType_Float,
+		Variable_DataType_Double,
+		Variable_DataType_Pointer,
+		Variable_DataType_Size /* Marker for derivatives to enum */
+	} Variable_DataType;
+
+	/* See Variable */
+	#define __Variable \
+		/* General info */ 					\
+		__Stg_Component						\
+									\
+		/* Virtual info */ 					\
+									\
+		/* Variable info */ 					\
+		Index				offsetCount; 		/**< Number of fields in this variable. */ \
+		SizeT*				offsets; 		/**< The offset in bytes these fields are in the struct.*/ \
+		Variable_DataType*		dataTypes;		/**< A list of original data types. */ \
+		Index*				dataTypeCounts;		/**< A list of the number of data. */ \
+		SizeT*				structSizePtr; 		/**< A pointer to the size of the structure. */ \
+		void**				arrayPtrPtr; 		/**< A pointer to a pointer to the 1D array data. */ \
+		Index*				arraySizePtr; 		/**< A pointer to the size/count of the 1D array data. */ \
+									\
+		SizeT*				dataSizes; 		/**< The size in bytes of each field in this variable. */ \
+		SizeT				structSize; 		/**< The size of the structure. */ \
+		void*				arrayPtr; 		/**< A pointer to the 1D array of structures. */ \
+		Index				arraySize; 		/**< The size/count of the 1D array of structures. */ \
+		Variable**			components;		/**< For each component of this variable that we made a variable for, the pointer to the variable. */ \
+		Bool				allocateSelf;		\
+		Variable_Register*		vr;
+
+	struct _Variable { __Variable };
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructors
+	*/
+	
+	/** Creates a new Variable. A Variable holds the run-time information of a complex data type created by the programmer.
+	  * Essentially it associates a textual name to a variable in the program that the user can use to access or modify.
+	  *
+	  * For example, if the program has an array of doubles that stores temperature, a Variable can be created with the name
+	  * "temperature", which will know how to access any item of this array. This name can then be added to a list of variables
+	  * to dump, where the code doing so has at compile-time has no idea about the existance of this variable.
+	  * 
+	  * This constructor is the most complex, allowing the captured data to be a composition of items in a struct, of which
+	  * itself may be in an array. Each item can be named, causing the construction of a new variable for each, but only if the
+	  * register is made available and the name is not 0. If the register is made available, then this variable is also added
+	  * to the register. In the case where there is only one item, but it is a vector, the name list must reperesent the name
+	  * each each vector item (as opposed to items of the complex type). 
+	  * If structSizePtr is 0 and dataCount is 1, it will attempt to work out the size from the dataType
+	  * (otherwise it will assert). The casting allows the Variable to be seen in a different type to its actual representation
+	  * (e.g. as an arry of floats instead of doubles). If dataCastTypes == 0, then no casting is done for any component. The
+	  * size of the struct, the size of the array and the pointer to the array are provided as pointers to this information, of
+	  * which will get resolved/dereferenced at the build phase. */
+	Variable* Variable_New( 
+		Name						name,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr );
+	
+	
+	Variable* Variable_DefaultNew( Name name );
+	
+	/** Creates a new Variable. A Variable holds the run-time information of a complex data type created by the programmer.
+	  * Essentially it associates a textual name to a variable in the program that the user can use to access or modify.
+	  *
+	  * See Variable_New for more info.
+	  * 
+	  * This constructor is a shortcut to create a Variable of a scalar in an array. The stride/struct size is the size
+	  * of the dataType. There is no casting. */
+	Variable* Variable_NewScalar( 
+		Name						name,
+		Variable_DataType				dataType,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr );
+	
+	/** Creates a new Variable. A Variable holds the run-time information of a complex data type created by the programmer.
+	  * Essentially it associates a textual name to a variable in the program that the user can use to access or modify.
+	  *
+	  * See Variable_New for more info.
+	  * 
+	  * This constructor is a shortcut to create a Variable of a vector in an array. The names of the vector components are
+	  * optional and are specified via the variable arguement list at the end. A 0 value signifies no name for the associated
+	  * vector component. The stride/struct size is the size of the dataType. There is no casting.*/
+	Variable* Variable_NewVector( 
+		Name						name,
+		Variable_DataType				dataType,
+		Index						dataTypeCount,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr,
+		... 						/* vector component names */ );
+	
+	/** Constructor interface. */
+	Variable* _Variable_New(
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print, 
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*		_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*			_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name						name,
+		Bool						initFlag,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Variable_Register*				vr );
+	
+	
+	/** Initialise a Variable */
+	void Variable_Init(
+		Name						name,
+		Variable*					self,
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Bool						allocateSelf,
+		Variable_Register*				vr );
+	
+	/** Init interface. */
+	void _Variable_Init(
+		Variable*					self, 
+		Index						dataCount,
+		SizeT*						dataOffsets,
+		Variable_DataType*				dataTypes,
+		Index*						dataTypeCounts,
+		Name*						dataNames,
+		SizeT*						structSizePtr,
+		Index*						arraySizePtr,
+		void**						arrayPtrPtr,
+		Bool                        allocateSelf,
+		Variable_Register*				vr );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	/** Stg_Class_Delete Variable implementation */
+	void _Variable_Delete( void* variable );
+	
+	/** Print Variable implementation */
+	void _Variable_Print( void* variable, Stream* stream );
+	
+	/** Copy implementation */
+	#define Variable_Copy( self ) \
+		(Variable*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define Variable_DeepCopy( self ) \
+		(Variable*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _Variable_Copy( void* variable, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/** Build implementation */
+	void _Variable_Build( void* variable, void* data );
+	
+	/** Initialisation implementation */
+	void _Variable_Initialise( void* variable, void* data );
+	
+	/** Execution implementation */
+	void _Variable_Execute( void* variable, void* data );
+	
+	void _Variable_Construct( void* variable, Stg_ComponentFactory* cf, void* data );
+	
+	void _Variable_Destroy( void* variable, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Private Member functions: Fundamental address calculators
+	*/
+	
+	/** Implementation of "get" the structure in an array, that the requested data member is in. Private (Do not directly
+	 *  use!)
+	 *  NB:- the array_I needs to be cast to an ArithPointer below - see __Variable_GetPtr() for reason. */
+	#define __Variable_GetStructPtr( self, array_I ) \
+		( ( (self)->offsetCount < 2 ) ? \
+			( (void*)( (ArithPointer)(self)->arrayPtr + (ArithPointer)(array_I) * (ArithPointer)( (self)->structSize) + (ArithPointer)( (self)->offsets[0] ) ))  : \
+			( (void*)((ArithPointer)(self)->arrayPtr + (ArithPointer)(array_I) * (ArithPointer)((self)->structSize)) ) )
+	#ifdef CAUTIOUS
+		/** Implementation of "get" the structure in an array that the requested data member is in if CAUTIOUS is defined.
+		 *  It ensures that array_I is within its bounds. Private (Do not directly use!) */
+		#define _Variable_GetStructPtr( self, array_I ) \
+			( (array_I) < (self)->arraySize ? \
+				__Variable_GetStructPtr( (self), (array_I) ) : \
+				/*TODO : call J_Firewall, then return NULL. */ \
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Array array_I %d out of range\n", array_I ), NULL) )
+	#else
+		/** Implementation of "get" the structure in an array, that the requested data member is in if CAUTIOUS is NOT
+		 *  defined. It DOES NOT ensure that array_I is within its bounds. Private (Do not directly use!) */
+		#define _Variable_GetStructPtr __Variable_GetStructPtr
+	#endif
+	
+	
+/* BUG!:	( (void*)((ArithPointer)_Variable_GetStructPtr( (self), (array_I) ) + (self)->offsets[component_I]) ) */
+
+	/** Implementation of "get" the requested data member in a structure in an array. Private (Do not directly use!)
+		NB - we cast the array_I to an ArithPointer since its usually passed in as an Index (unsigned int), which on
+		some architectures such as the SGI Altix is of a different size to the ArithPointer (unsigned long) */
+	#define __Variable_GetPtr( self, array_I, component_I, vector_I ) \
+		( (void*)((ArithPointer)(self)->arrayPtr + (ArithPointer)(array_I) * (self)->structSize + (self)->offsets[component_I]) )
+	#ifdef CAUTIOUS
+		/** Implementation of "get" the requested data member in a structure in an array if CAUTIOUS is defined.
+		 *  It ensures that component_I  and array_I are within its bounds. Private (Do not directly use!) */
+		#define _Variable_GetPtr( self, array_I, component_I, vector_I ) \
+			( (component_I) < (self)->offsetCount ? \
+				__Variable_GetPtr( (self), (array_I), (component_I), (vector_I) ) :\
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Offset array_I out of range\n" ), NULL) )
+	#else
+		/** Implementation of "get" the requested data member in a structure in an array if CAUTIOUS is NOT
+		 *  defined. It DOES NOT ensure that component_I and array_I are within its bounds. Private (Do not directly
+		 *  use!) */
+		#define _Variable_GetPtr __Variable_GetPtr
+	#endif
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "char" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "char" inbuilt type, return a pointer to that char (type casted to char*). Private
+	 * (Do not directly use!). */
+	#define _Variable_GetPtrChar( self, array_I ) \
+		( (char*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "char" inbuilt type, return a pointer to that char (type casted to char*).
+		 *  It ensures the Variable is of a "char" and is not complex. */
+		#define Variable_GetPtrChar( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Char ? \
+				_Variable_GetPtrChar( (self), (array_I) ) : \
+				(char*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a char or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "char" inbuilt type, return a pointer to that char (type casted to char*).
+		 *  It DOES NOT ensure the Variable is of a "char" and is not complex. */
+		 #define Variable_GetPtrChar _Variable_GetPtrChar
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char. Private (Do not directly use!). */
+	#define _Variable_GetValueAtChar( self, array_I, vector_I ) \
+		( Variable_GetPtrChar( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "char" inbuilt type, return that char. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtChar( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtChar( (self), (array_I), (vector_I) ) : \
+				(char)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "char" inbuilt type, return that char. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtChar _Variable_GetValueAtChar
+	#endif
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return a pointer to that char.  */
+	#define Variable_GetPtrAtChar( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as a short */
+	#define Variable_GetValueAtCharAsShort( self, array_I, vector_I ) \
+		( (short)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as an int */
+	#define Variable_GetValueAtCharAsInt( self, array_I, vector_I ) \
+		( (int)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as a float */
+	#define Variable_GetValueAtCharAsFloat( self, array_I, vector_I ) \
+		( (float)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as a double */
+	#define Variable_GetValueAtCharAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, return that char as a pointer (void*) */
+	#define Variable_GetValueAtCharAsPointer( self, array_I, vector_I ) \
+		( (void*)( (int)Variable_GetValueAtChar( (self), (array_I), (vector_I) ) ) )
+	
+	/** Assuming this is a Variable of a vector "char" inbuilt type, set that char to a new value (internally type casted to char) */
+	#define Variable_SetValueAtChar( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtChar( (self), (array_I), (vector_I) ) = (char)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char */
+	#define Variable_GetValueChar( self, array_I ) \
+		( Variable_GetValueAtChar( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as a short */
+	#define Variable_GetValueCharAsShort( self, array_I ) \
+		( (short)Variable_GetValueChar( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as an int */
+	#define Variable_GetValueCharAsInt( self, array_I ) \
+		( (int)Variable_GetValueChar( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as a float */
+	#define Variable_GetValueCharAsFloat( self, array_I ) \
+		( (float)Variable_GetValueChar( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as a double */
+	#define Variable_GetValueCharAsDouble( self, array_I ) \
+		( (double)Variable_GetValueChar( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, return that char as a pointer (void*) */
+	#define Variable_GetValueCharAsPointer( self, array_I ) \
+		( (void*)( (int)Variable_GetValueChar( (self), (array_I) ) ) )
+	
+	/** Assuming this is a Variable of a scalar "char" inbuilt type, set that char to a new value (internally type casted to
+	 *  char) */
+	#define Variable_SetValueChar( self, array_I, value ) \
+		( *Variable_GetPtrChar( (self), (array_I) ) = (char)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "short" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return a pointer to that short (type casted to short*). Private
+	 * (Do not directly use!). */
+	#define _Variable_GetPtrShort( self, array_I ) \
+		( (short*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "short" inbuilt type, return a pointer to that short (type casted to short*).
+		 *  It ensures the Variable is of a "short" and is not complex. */
+		#define Variable_GetPtrShort( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Short ? \
+				_Variable_GetPtrShort( (self), (array_I) ) : \
+				(short*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a short or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "short" inbuilt type, return a pointer to that short (type casted to short*).
+		 *  It DOES NOT ensure the Variable is of a "short" and is not complex. */
+		 #define Variable_GetPtrShort _Variable_GetPtrShort
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short. Private (Do not directly use!). */
+	#define _Variable_GetValueAtShort( self, array_I, vector_I ) \
+		( Variable_GetPtrShort( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "short" inbuilt type, return that short. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtShort( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtShort( (self), (array_I), (vector_I) ) : \
+				(short)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "short" inbuilt type, return that short. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtShort _Variable_GetValueAtShort
+	#endif
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return a pointer to that short.  */
+	#define Variable_GetPtrAtShort( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as a char */
+	#define Variable_GetValueAtShortAsChar( self, array_I, vector_I ) \
+		( (char)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as an int */
+	#define Variable_GetValueAtShortAsInt( self, array_I, vector_I ) \
+		( (int)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as a float */
+	#define Variable_GetValueAtShortAsFloat( self, array_I, vector_I ) \
+		( (float)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as a double */
+	#define Variable_GetValueAtShortAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, return that short as a pointer (void*) */
+	#define Variable_GetValueAtShortAsPointer( self, array_I, vector_I ) \
+		( (void*)( (int)Variable_GetValueAtShort( (self), (array_I), (vector_I) ) ) )
+	
+	/** Assuming this is a Variable of a vector "short" inbuilt type, set that short to a new value (internally type casted to
+	 *  short)*/
+	#define Variable_SetValueAtShort( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtShort( self, array_I, vector_I ) = (short)(value) )
+	
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short */
+	#define Variable_GetValueShort( self, array_I ) \
+		( Variable_GetValueAtShort( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as a char */
+	#define Variable_GetValueShortAsChar( self, array_I ) \
+		( (char)Variable_GetValueShort( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as an int */
+	#define Variable_GetValueShortAsInt( self, array_I ) \
+		( (int)Variable_GetValueShort( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as a float */
+	#define Variable_GetValueShortAsFloat( self, array_I ) \
+		( (float)Variable_GetValueShort( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as a double */
+	#define Variable_GetValueShortAsDouble( self, array_I ) \
+		( (double)Variable_GetValueShort( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, return that short as a pointer (void*) */
+	#define Variable_GetValueShortAsPointer( self, array_I ) \
+		( (void*)( (int)Variable_GetValueShort( (self), (array_I) ) ) )
+	
+	/** Assuming this is a Variable of a "short" inbuilt type, set that short to a new value (internally type casted to
+	 *  short)*/
+	#define Variable_SetValueShort( self, array_I, value ) \
+		( *Variable_GetPtrShort( self, array_I ) = (short)(value) )
+	
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "int" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "int" inbuilt type, return a pointer to that int (type casted to int*). Private
+	 * (Do not directly use!). */
+	#define _Variable_GetPtrInt( self, array_I ) \
+		( (int*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "int" inbuilt type, return a pointer to that int (type casted to int*).
+		 *  It ensures the Variable is of a "int" and is not complex. */
+		#define Variable_GetPtrInt( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Int ? \
+				_Variable_GetPtrInt( (self), (array_I) ) : \
+				(int*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a int or is complex, but this macro assumes so.\n" ),NULL) )
+	#else
+		/** Assuming this is a Variable of a "int" inbuilt type, return a pointer to that int (type casted to int*).
+		 *  It DOES NOT ensure the Variable is of a "int" and is not complex. */
+		 #define Variable_GetPtrInt _Variable_GetPtrInt
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int. Private (Do not directly use!). */
+	#define _Variable_GetValueAtInt( self, array_I, vector_I ) \
+		( Variable_GetPtrInt( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "int" inbuilt type, return that int. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtInt( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtInt( (self), (array_I), (vector_I) ) : \
+				(int)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "int" inbuilt type, return that int. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtInt _Variable_GetValueAtInt
+	#endif
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return a pointer to that int.  */
+	#define Variable_GetPtrAtInt( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a char */
+	#define Variable_GetValueAtIntAsChar( self, array_I, vector_I ) \
+		( (char)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a short */
+	#define Variable_GetValueAtIntAsShort( self, array_I, vector_I ) \
+		( (short)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a float */
+	#define Variable_GetValueAtIntAsFloat( self, array_I, vector_I ) \
+		( (float)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a double */
+	#define Variable_GetValueAtIntAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, return that int as a pointer (void*) */
+	#define Variable_GetValueAtIntAsPointer( self, array_I, vector_I ) \
+		( (void*)Variable_GetValueAtInt( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "int" inbuilt type, set that int to a new value (internally type casted to int) */
+	#define Variable_SetValueAtInt( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtInt( (self), (array_I), (vector_I) ) = (int)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int */
+	#define Variable_GetValueInt( self, array_I ) \
+		( Variable_GetValueAtInt( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a char */
+	#define Variable_GetValueIntAsChar( self, array_I ) \
+		( (char)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a short */
+	#define Variable_GetValueIntAsShort( self, array_I ) \
+		( (short)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a float */
+	#define Variable_GetValueIntAsFloat( self, array_I ) \
+		( (float)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a double */
+	#define Variable_GetValueIntAsDouble( self, array_I ) \
+		( (double)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, return that int as a pointer (void*) */
+	#define Variable_GetValueIntAsPointer( self, array_I ) \
+		( (void*)Variable_GetValueInt( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "int" inbuilt type, set that int to a new value (internally type casted to int) */
+	#define Variable_SetValueInt( self, array_I, value ) \
+		( *Variable_GetPtrInt( (self), (array_I) ) = (int)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "float" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "float" inbuilt type, return a pointer to that float (type casted to float*). Private
+	 * (Do not directly use!). */
+	#define _Variable_GetPtrFloat( self, array_I ) \
+		( (float*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "float" inbuilt type, return a pointer to that float (type casted to float*).
+		 *  It ensures the Variable is of a "float" and is not complex. */
+		#define Variable_GetPtrFloat( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Float ? \
+				_Variable_GetPtrFloat( (self), (array_I) ) : \
+				(float*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a float or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "float" inbuilt type, return a pointer to that float (type casted to float*).
+		 *  It DOES NOT ensure the Variable is of a "float" and is not complex. */
+		 #define Variable_GetPtrFloat _Variable_GetPtrFloat
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float. Private (Do not directly use!). */
+	#define _Variable_GetValueAtFloat( self, array_I, vector_I ) \
+		( Variable_GetPtrFloat( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "float" inbuilt type, return that float. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtFloat( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) : \
+				(float)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "float" inbuilt type, return that float. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtFloat _Variable_GetValueAtFloat
+	#endif
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return a pointer to that float.  */
+	#define Variable_GetPtrAtFloat( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as a char */
+	#define Variable_GetValueAtFloatAsChar( self, array_I, vector_I ) \
+		( (char)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as a short */
+	#define Variable_GetValueAtFloatAsShort( self, array_I, vector_I ) \
+		( (short)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as an int */
+	#define Variable_GetValueAtFloatAsInt( self, array_I, vector_I ) \
+		( (int)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as a double */
+	#define Variable_GetValueAtFloatAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, return that float as a pointer (void*) */
+	#define Variable_GetValueAtFloatAsPointer( self, array_I, vector_I ) \
+		( (void*)( (int)Variable_GetValueAtFloat( (self), (array_I), (vector_I) ) ) )
+	
+	/** Assuming this is a Variable of a vector "float" inbuilt type, set that float to a new value (internally type casted to
+	 *  float) */
+	#define Variable_SetValueAtFloat( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtFloat( (self), (array_I), (vector_I) ) = (float)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float */
+	#define Variable_GetValueFloat( self, array_I ) \
+		( Variable_GetValueAtFloat( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as a char */
+	#define Variable_GetValueFloatAsChar( self, array_I ) \
+		( (char)Variable_GetValueFloat( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as a short */
+	#define Variable_GetValueFloatAsShort( self, array_I ) \
+		( (short)Variable_GetValueFloat( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as an int */
+	#define Variable_GetValueFloatAsInt( self, array_I ) \
+		( (int)Variable_GetValueFloat( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as a double */
+	#define Variable_GetValueFloatAsDouble( self, array_I ) \
+		( (double)Variable_GetValueFloat( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, return that float as a pointer (void*) */
+	#define Variable_GetValueFloatAsPointer( self, array_I ) \
+		( (void*)( (int)Variable_GetValueFloat( (self), (array_I) ) ) )
+	
+	/** Assuming this is a Variable of a scalar "float" inbuilt type, set that float to a new value (internally type casted to
+	 *  float) */
+	#define Variable_SetValueFloat( self, array_I, value ) \
+		( *Variable_GetPtrFloat( (self), (array_I) ) = (float)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "double" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "double" inbuilt type, return a pointer to that double (type casted to double*).
+	 *  Private (Do not directly use!). */
+	#define _Variable_GetPtrDouble( self, array_I ) \
+		( (double*)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "double" inbuilt type, return a pointer to that double (type casted to
+		 *  double*). It ensures the Variable is of a "double" and is not complex. */
+		#define Variable_GetPtrDouble( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Double ? \
+				_Variable_GetPtrDouble( (self), (array_I) ) : \
+				(double*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a double or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "double" inbuilt type, return a pointer to that double (type casted to
+		 *   double*). It DOES NOT ensure the Variable is of a "double" and is not complex. */
+		 #define Variable_GetPtrDouble _Variable_GetPtrDouble
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double. Private (Do not directly use!). */
+	#define _Variable_GetValueAtDouble( self, array_I, vector_I ) \
+		( (Variable_GetPtrDouble( (self), (array_I) ))[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "double" inbuilt type, return that double. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtDouble( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) : \
+				(double)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ) )
+	#else
+		/** Assuming this is a Variable of a vector "double" inbuilt type, return that double. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtDouble _Variable_GetValueAtDouble
+	#endif
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return a pointer to that double.  */
+	#define Variable_GetPtrAtDouble( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a char */
+	#define Variable_GetValueAtDoubleAsChar( self, array_I, vector_I ) \
+		( (char)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a short */
+	#define Variable_GetValueAtDoubleAsShort( self, array_I, vector_I ) \
+		( (short)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a int */
+	#define Variable_GetValueAtDoubleAsInt( self, array_I, vector_I ) \
+		( (int)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a float */
+	#define Variable_GetValueAtDoubleAsFloat( self, array_I, vector_I ) \
+		( (float)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a double */
+	#define Variable_GetValueAtDoubleAsDouble( self, array_I, vector_I ) \
+		( (double)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, return that double as a pointer (void*) */
+	#define Variable_GetValueAtDoubleAsPointer( self, array_I, vector_I ) \
+		( (void*)( (int)Variable_GetValueAtDouble( (self), (array_I), (vector_I) ) ) )
+	
+	/** Assuming this is a Variable of a vector "double" inbuilt type, set that double to a new value (internally type casted to
+	 *  double) */
+	#define Variable_SetValueAtDouble( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtDouble( (self), (array_I), (vector_I) ) = (double)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double */
+	#define Variable_GetValueDouble( self, array_I ) \
+		( Variable_GetValueAtDouble( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a char */
+	#define Variable_GetValueDoubleAsChar( self, array_I ) \
+		( (char)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a short */
+	#define Variable_GetValueDoubleAsShort( self, array_I ) \
+		( (short)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a int */
+	#define Variable_GetValueDoubleAsInt( self, array_I ) \
+		( (int)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a float */
+	#define Variable_GetValueDoubleAsFloat( self, array_I ) \
+		( (float)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a double */
+	#define Variable_GetValueDoubleAsDouble( self, array_I ) \
+		( (double)Variable_GetValueDouble( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, return that double as a pointer (void*) */
+	#define Variable_GetValueDoubleAsPointer( self, array_I ) \
+		( (void*)( (int)Variable_GetValueDouble( (self), (array_I) ) ) )
+	
+	/** Assuming this is a Variable of a scalar "double" inbuilt type, set that double to a new value (internally type casted to
+	 *  double) */
+	#define Variable_SetValueDouble( self, array_I, value ) \
+		( *Variable_GetPtrDouble( (self), (array_I) ) = (double)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of a "pointer" inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of a "pointer" inbuilt type, return a pointer to that pointer (type casted to void**).
+	 *  Private. (Do not directly use!). */
+	#define _Variable_GetPtrPointer( self, array_I ) \
+		( (void**)_Variable_GetStructPtr( (self), (array_I) ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a "pointer" inbuilt type, return a pointer to that pointer (type casted to
+		 *  void**). It ensures the Variable is of a "pointer" and is not complex. */
+		#define Variable_GetPtrPointer( self, array_I ) \
+			( (self)->offsetCount == 1 && (self)->dataTypes[0] == Variable_DataType_Pointer ? \
+				_Variable_GetPtrPointer( (self), (array_I) ) : \
+				(void**)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is not of a pointer or is complex, but this macro assumes so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a "pointer" inbuilt type, return a pointer to that pointer (type casted to
+		 *  void**). It DOES NOT ensure the Variable is of a "pointer" and is not complex. */
+		 #define Variable_GetPtrPointer _Variable_GetPtrPointer
+	#endif
+	
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer. Private (Do not directly use!). */
+	#define _Variable_GetValueAtPointer( self, array_I, vector_I ) \
+		( Variable_GetPtrPointer( (self), (array_I) )[(vector_I)] )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer. It ensures that vector_I is
+		 *  within range. */
+		#define Variable_GetValueAtPointer( self, array_I, vector_I ) \
+			( (vector_I) < (self)->dataTypeCounts[0] ? \
+				_Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) : \
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Index into vector of inbuild type is out of range.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer. It DOES NOT ensure that
+		 *  vector_I is within range. */
+		 #define Variable_GetValueAtPointer _Variable_GetValueAtPointer
+	#endif
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return a pointer to that pointer.  */
+	#define Variable_GetPtrAtPointer( self, array_I, vector_I ) \
+		( &_Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as a char pointer (char*) */
+	#define Variable_GetValueAtPointerAsCharPointer( self, array_I, vector_I ) \
+		( (char*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as a short pointer (short*) */
+	#define Variable_GetValueAtPointerAsShortPointer( self, array_I, vector_I ) \
+		( (short*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as an int pointer (int*) */
+	#define Variable_GetValueAtPointerAsIntPointer( self, array_I, vector_I ) \
+		( (int*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as a float pointer (float*) */
+	#define Variable_GetValueAtPointerAsFloatPointer( self, array_I, vector_I ) \
+		( (float*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, return that pointer as a double pointer (double*) */
+	#define Variable_GetValueAtPointerAsDoublePointer( self, array_I, vector_I ) \
+		( (double*)Variable_GetValueAtPointer( (self), (array_I), (vector_I) ) )
+	
+	/** Assuming this is a Variable of a vector "pointer" inbuilt type, set that pointer to a new value (internally type casted to
+	 *  void*) */
+	#define Variable_SetValueAtPointer( self, array_I, vector_I, value ) \
+		( *Variable_GetPtrAtPointer( (self), (array_I), (vector_I) ) = (void*)(value) )
+	
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer (void*) */
+	#define Variable_GetValuePointer( self, array_I ) \
+		( Variable_GetValueAtPointer( (self), (array_I), 0 ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as a char pointer (char*) */
+	#define Variable_GetValuePointerAsCharPointer( self, array_I ) \
+		( (char*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as a short pointer (short*) */
+	#define Variable_GetValuePointerAsShortPointer( self, array_I ) \
+		( (short*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as an int pointer (int*) */
+	#define Variable_GetValuePointerAsIntPointer( self, array_I ) \
+		( (int*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as a float pointer (float*) */
+	#define Variable_GetValuePointerAsFloatPointer( self, array_I ) \
+		( (float*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, return that pointer as a double pointer (double*) */
+	#define Variable_GetValuePointerAsDoublePointer( self, array_I ) \
+		( (double*)Variable_GetValuePointer( (self), (array_I) ) )
+	
+	/** Assuming this is a Variable of a scalar "pointer" inbuilt type, set that pointer to a new value (internally type casted to
+	 *  void*) */
+	#define Variable_SetValuePointer( self, array_I, value ) \
+		( *Variable_GetPtrPointer( (self), (array_I) ) = (void*)(value) )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: Assuming this is a Variable of any inbuilt type
+	*/
+	
+	/** Assuming this is a Variable of any inbuilt type, return a char (type casted to char). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsChar( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueChar( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsChar( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsChar( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsChar( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsChar( (self), (array_I) ) : \
+		  (char)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a char (type casted to char). It ensures the Variable
+		 * is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsChar( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsChar( (self), (array_I) ) : \
+				(char)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a char (type casted to char). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsChar _Variable_GetValueAsChar
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a short (type casted to short). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsShort( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsShort( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShort( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsShort( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsShort( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsShort( (self), (array_I) ) : \
+		  (short)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a short (type casted to short). It ensures the Variable
+		 * is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsShort( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsShort( (self), (array_I) ) : \
+				(short)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a short (type casted to short). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsShort _Variable_GetValueAsShort
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a int (type casted to int). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsInt( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsInt( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsInt( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueInt( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsInt( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsInt( (self), (array_I) ) : \
+		  (int)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a int (type casted to int). It ensures the Variable
+		 * is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsInt( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsInt( (self), (array_I) ) : \
+				(int)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a int (type casted to int). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsInt _Variable_GetValueAsInt
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a float (type casted to float). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer.*/
+	#define _Variable_GetValueAsFloat( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsFloat( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsFloat( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsFloat( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloat( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsFloat( (self), (array_I) ) : \
+		  (float)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a float (type casted to float). It ensures the Variable
+		 * is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsFloat( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsFloat( (self), (array_I) ) : \
+				(float)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a float (type casted to float). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsFloat _Variable_GetValueAsFloat
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a double (type casted to double). Private. (Do not directly
+	 *  use!). Resolution order: char, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsDouble( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsDouble( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsDouble( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsDouble( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsDouble( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDouble( (self), (array_I) ) : \
+		  (double)Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a double (type casted to double). It ensures the
+		 *  Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsDouble( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsDouble( (self), (array_I) ) : \
+				(double)Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a double (type casted to double). It DOES NOT ensure
+		 *  the Variable is not complex. Resolution order: char, short, int, float, double, pointer. */
+		#define Variable_GetValueAsDouble _Variable_GetValueAsDouble
+	#endif
+	
+	/** Assuming this is a Variable of any inbuilt type, return a pointer (type casted to void*). Private. (Do not directly
+	 *  use!). Resolution order: pointer, short, int, float, double, pointer. */
+	#define _Variable_GetValueAsPointer( self, array_I ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_GetValueCharAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_GetValueShortAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_GetValueIntAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_GetValueFloatAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_GetValueDoubleAsPointer( (self), (array_I) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Pointer ?	Variable_GetValuePointer( (self), (array_I) ) : \
+		  (Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ), NULL) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, return a pointer (type casted to void*). It ensures the Variable
+		 * is not complex. Resolution order: pointer, short, int, float, double, pointer. */
+		#define Variable_GetValueAsPointer( self, array_I ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_GetValueAsPointer( (self), (array_I) ) : \
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, return a pointer (type casted to void*). It DOES NOT ensure the
+		 *  Variable is not complex. Resolution order: pointer, short, int, float, double, pointer. */
+		#define Variable_GetValueAsPointer _Variable_GetValueAsPointer
+	#endif
+	
+
+	/** Assuming this is a Variable of any inbuilt type, set the value. Private. (Do not directly use!). Resolution order:
+	 *  pointer, short, int, float, double, pointer. */
+	#define _Variable_SetValueFromInbuilt( self, array_I, value ) \
+		( (self)->dataTypes[0] == Variable_DataType_Char ?	Variable_SetValueChar( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Short ?	Variable_SetValueShort( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Int ?	Variable_SetValueInt( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Float ?	Variable_SetValueFloat( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Double ?	Variable_SetValueDouble( (self), (array_I), (value) ) : \
+		  (self)->dataTypes[0] == Variable_DataType_Pointer ?	Variable_SetValuePointer( (self), (array_I), (value) ) : \
+		  (Journal_Firewall( \
+			0, \
+			Journal_Register( Error_Type, Variable_Type ), \
+			"Variable is not of any inbuilt type, but this macro assumes so.\n" ), NULL) )
+	#ifdef CAUTIOUS
+		/** Assuming this is a Variable of any inbuilt type, set the value. It ensures the Variable is not complex.
+		  * Resolution order: pointer, short, int, float, double, pointer. */
+		#define Variable_SetValueFromInbuilt( self, array_I, value ) \
+			( (self)->offsetCount == 1 ? \
+				_Variable_SetValueFromInbuilt( (self), (array_I), (value) ) : \
+				(void*)(Journal_Firewall( \
+					0, \
+					Journal_Register( Error_Type, Variable_Type ), \
+					"Variable is complex, but this macro assumes not so.\n" ), NULL) )
+	#else
+		/** Assuming this is a Variable of any inbuilt type, set the value. It DOES NOT ensure the Variable is not complex.
+		 *  Resolution order: pointer, short, int, float, double, pointer. */
+		#define Variable_SetValueFromInbuilt _Variable_SetValuefromInBuilt
+	#endif
+	
+
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Member functions: for any Variable
+	*/
+	
+	/** "Get" the requested data from the Variable that may be in an array. The returned value is a void*. If the Variable is
+	 *  of a basic type, then the pointer to the scalar or the vector itself with the structure (if relevant) is returned. If
+	 *  the Variable is of a complex type (i.e. it has more than one data component), then the pointer to the structure the
+	 *  variable repesents is returned. */
+	#define Variable_GetStructPtr _Variable_GetStructPtr
+	
+	/** Generic Variable "set". Works for any Variable. For complex Variables, the value must be the array of bytes of all the
+	 * data members concatenated (i.e. in marshalled form, not the structured form). Inherently slow operation. */
+	void Variable_SetValue( void* variable, Index array_I, void* value );
+	
+	/** Generic Variable "get". Works for any Variable. For complex Variables, the value must be the array of already allocated
+	 * bytes of all the data members concatenated (i.e. in marshalled form, not the structured form). Inherently slow
+	 * operation. */
+	void Variable_GetValue( void* variable, Index array_I, void* value );
+
+	/** Updates the local members in variable from pointers
+	 *  Used then the data is resized or extened.
+	 *  If the data is an array which the array length is changed, this function expects the length */
+	void Variable_Update( void* variable );
+
+	/** Sets value to all entries in array of variable */
+	void Variable_SetValueDoubleAll( void* variable, double value ) ;
+
+	void Variable_SaveToFileAsDoubles( void* variable, char* filename );
+
+	void Variable_ReadFromFileAsDoubles( void* variable, char* filename );
+	
+	/** Returns || variable - comparison || / || variable ||, 
+	  * where ||x|| indicates the Euclidean Norm which is the square root of the sum of the squares for each component in x
+	  * i.e.  ||x|| = \sqrt{\sum_i x_i^2}*/
+	double Variable_ValueCompare( void* variable, void* _comparison );
+	/** Checks whether || variable - comparison || / || variable || < tolerance */
+	Bool Variable_ValueCompareWithinTolerance( void* variable, void* comparison, double tolerance );
+
+#endif /* __Base_Automation_Variable__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">Variable</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+	<struct>
+		<param name="Name">VectorComponentCount</param>
+		<param name="Type">UnsignedInt</param>
+		<param name="Default">nameCount</param>
+		<param name="Description">...</param>
+	</struct>
+
+</list>
+
+<list name="Dependencies">
+<!-- This component calls in another directory so the info above/below may not be complete-->
+	<struct>
+		<param name="Essential">No</param>
+		<param name="Name">Dependency</param>
+		<param name="Type">Stg_Component</param>
+		<param name="Description">...</param>
+	</struct>
+
+<!-- PLEASE, check the above struct information is accurate, in line number 839 of the c file and then remove this comment afterwards -->
+
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,584 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: VariableAllVC.c 2509 2005-01-10 23:39:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+                                                                                                                                    
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+#include "ConditionFunction.h"
+#include "ConditionFunction_Register.h"
+#include "VariableCondition.h"
+#include "VariableAllVC.h"
+
+#include <string.h>
+#include <assert.h>
+
+
+const Type VariableAllVC_Type = "VariableAllVC";
+const Name defaultVariableAllVCName = "defaultVariableAllVCName";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* VariableAllVC_Factory(
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register, 
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return (VariableCondition*)VariableAllVC_New( defaultVariableAllVCName, NULL, variable_Register, conFunc_Register, dictionary, data );
+}
+
+
+VariableAllVC*	VariableAllVC_New(
+		Name						name,
+		Name						_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	return _VariableAllVC_New(
+		sizeof(VariableAllVC), 
+		VariableAllVC_Type, 
+		_VariableAllVC_Delete, 
+		_VariableAllVC_Print, 
+		_VariableAllVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)VariableAllVC_DefaultNew,
+		_VariableCondition_Construct,
+		_VariableAllVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name, 
+		True,
+		_VariableAllVC_BuildSelf, 
+		_VariableAllVC_PrintConcise,
+		_VariableAllVC_ReadDictionary,
+		_VariableAllVC_GetSet, 
+		_VariableAllVC_GetVariableCount, 
+		_VariableAllVC_GetVariableIndex, 
+		_VariableAllVC_GetValueIndex, 
+		_VariableAllVC_GetValueCount, 
+		_VariableAllVC_GetValue,
+		_dictionaryEntryName,
+		variable_Register, 
+		conFunc_Register, 
+		dictionary, 
+		data );
+}
+
+VariableAllVC*	VariableAllVC_DefaultNew( Name name )
+{
+	return (VariableAllVC*)_VariableAllVC_New(
+		sizeof(VariableAllVC), 
+		VariableAllVC_Type, 
+		_VariableAllVC_Delete, 
+		_VariableAllVC_Print, 
+		_VariableAllVC_Copy,
+		(Stg_Component_DefaultConstructorFunction*)VariableAllVC_DefaultNew,
+		_VariableCondition_Construct,
+		_VariableAllVC_Build,
+		_VariableCondition_Initialise,
+		_VariableCondition_Execute,
+		_VariableCondition_Destroy,
+		name,
+		False,
+		_VariableAllVC_BuildSelf, 
+		_VariableAllVC_PrintConcise,
+		_VariableAllVC_ReadDictionary,
+		_VariableAllVC_GetSet, 
+		_VariableAllVC_GetVariableCount, 
+		_VariableAllVC_GetVariableIndex, 
+		_VariableAllVC_GetValueIndex, 
+		_VariableAllVC_GetValueCount, 
+		_VariableAllVC_GetValue,
+		NULL,
+		NULL/*variable_Register*/, 
+		NULL/*conFunc_Register*/, 
+		NULL,
+		NULL );
+}
+
+void VariableAllVC_Init(
+		Name						name,
+		Name						_dictionaryEntryName, 
+		VariableAllVC*					self,
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data )
+{
+	/* General info */
+	self->type = VariableAllVC_Type;
+	self->_sizeOfSelf = sizeof(VariableAllVC);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _VariableAllVC_Delete;
+	self->_print = _VariableAllVC_Print;
+	self->_copy = _VariableAllVC_Copy;
+	self->_build = _VariableAllVC_Build;
+	self->_initialise = _VariableCondition_Initialise;
+	self->_execute = _VariableCondition_Execute;
+	self->_buildSelf = _VariableAllVC_BuildSelf;
+	self->_printConcise = _VariableAllVC_PrintConcise;
+	self->_readDictionary = _VariableAllVC_ReadDictionary;
+	self->_getSet = _VariableAllVC_GetSet;
+	self->_getVariableCount = _VariableAllVC_GetVariableCount;
+	self->_getVariableIndex = _VariableAllVC_GetVariableIndex;
+	self->_getValueIndex = _VariableAllVC_GetValueIndex;
+	self->_getValueCount = _VariableAllVC_GetValueCount;
+	self->_getValue = _VariableAllVC_GetValue;
+	
+	_Stg_Class_Init( (Stg_Class*)self );
+	_Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+	_Stg_Component_Init( (Stg_Component*)self );
+	_VariableCondition_Init( (VariableCondition*)self, variable_Register, conFunc_Register, dictionary );
+	
+	/* Stg_Class info */
+	_VariableAllVC_Init( self, _dictionaryEntryName, data );
+}
+
+
+VariableAllVC* _VariableAllVC_New( 
+		SizeT						_sizeOfSelf, 
+		Type						type,
+		Stg_Class_DeleteFunction*				_delete,
+		Stg_Class_PrintFunction*				_print,
+		Stg_Class_CopyFunction*				_copy, 
+		Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+		Stg_Component_ConstructFunction*		_construct,
+		Stg_Component_BuildFunction*			_build,
+		Stg_Component_InitialiseFunction*			_initialise,
+		Stg_Component_ExecuteFunction*			_execute,
+		Stg_Component_DestroyFunction*		_destroy,
+		Name						name, 
+		Bool						initFlag,
+		VariableCondition_BuildSelfFunc*		_buildSelf, 
+		VariableCondition_PrintConciseFunc*		_printConcise,
+		VariableCondition_ReadDictionaryFunc*		_readDictionary,
+		VariableCondition_GetSetFunc*			_getSet,
+		VariableCondition_GetVariableCountFunc*		_getVariableCount,
+		VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+		VariableCondition_GetValueIndexFunc*		_getValueIndex,
+		VariableCondition_GetValueCountFunc*		_getValueCount,
+		VariableCondition_GetValueFunc*			_getValue,
+		Name									_dictionaryEntryName, 
+		Variable_Register*				variable_Register, 
+		ConditionFunction_Register*			conFunc_Register,
+		Dictionary*					dictionary,
+		void*						data)
+{
+	VariableAllVC*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(VariableAllVC));
+	self = (VariableAllVC*)_VariableCondition_New(
+		_sizeOfSelf, 
+		type, 
+		_delete, 
+		_print,
+		_copy,
+		_defaultConstructor,
+		_construct,
+		_build,
+		_initialise,
+		_execute,
+		_destroy,
+		name,
+		initFlag,
+		_buildSelf, 
+		_printConcise,
+		_readDictionary,
+		_getSet, 
+		_getVariableCount, 
+		_getVariableIndex, 
+		_getValueIndex, 
+		_getValueCount, 
+		_getValue,
+		variable_Register, 
+		conFunc_Register,
+		dictionary );
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_VariableAllVC_Init( self, _dictionaryEntryName, data );
+	}
+	
+	return self;
+}
+
+
+void _VariableAllVC_Init(
+		void* 						allElementsVC,
+		Name						_dictionaryEntryName, 
+		void*						data )
+{
+	VariableAllVC*			self = (VariableAllVC*)allElementsVC;
+
+	self->isConstructed = True;
+	self->_dictionaryEntryName = _dictionaryEntryName;
+	self->data = data;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _VariableAllVC_ReadDictionary( void* variableCondition, void* dictionary ) {
+	VariableAllVC*			self = (VariableAllVC*)variableCondition;
+	Dictionary_Entry_Value*		vcDictVal;
+	Dictionary_Entry_Value		_vcDictVal;
+	Dictionary_Entry_Value*		varsVal;
+	VariableAllVC_Entry_Index	entry_I;
+	
+	/* Find dictionary entry */
+	if (self->_dictionaryEntryName)
+		vcDictVal = Dictionary_Get( dictionary, self->_dictionaryEntryName );
+	else
+	{
+		vcDictVal = &_vcDictVal;
+		Dictionary_Entry_Value_InitFromStruct( vcDictVal, dictionary );
+	}
+	
+	if (vcDictVal)
+	{
+		/* Obtain the variable entries */
+		self->_entryCount = Dictionary_Entry_Value_GetCount(Dictionary_Entry_Value_GetMember(vcDictVal, "variables"));
+		self->_entryTbl = Memory_Alloc_Array( VariableAllVC_Entry, self->_entryCount, "VariableAllVC->_entryTbl" );
+		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
+		
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			char*			valType;
+			Dictionary_Entry_Value*	valueEntry;
+			Dictionary_Entry_Value*	varDictListVal;
+			
+			varDictListVal = Dictionary_Entry_Value_GetElement(varsVal, entry_I);
+			valueEntry = Dictionary_Entry_Value_GetMember(varDictListVal, "value");
+			
+			self->_entryTbl[entry_I].varName = Dictionary_Entry_Value_AsString(
+				Dictionary_Entry_Value_GetMember(varDictListVal, "name"));
+				
+			valType = Dictionary_Entry_Value_AsString(Dictionary_Entry_Value_GetMember(varDictListVal, "type"));
+			if (!strcasecmp(valType, "func"))
+			{
+				char*	funcName = Dictionary_Entry_Value_AsString(valueEntry);
+				
+				self->_entryTbl[entry_I].value.type = VC_ValueType_CFIndex;
+				self->_entryTbl[entry_I].value.as.typeCFIndex = ConditionFunction_Register_GetIndex(
+					self->conFunc_Register, funcName);
+			}
+			else if (!strcasecmp(valType, "array"))
+			{
+				Dictionary_Entry_Value*	valueElement;
+				Index			i;
+
+				self->_entryTbl[entry_I].value.type = VC_ValueType_DoubleArray;
+				self->_entryTbl[entry_I].value.as.typeArray.size = Dictionary_Entry_Value_GetCount(valueEntry);
+				self->_entryTbl[entry_I].value.as.typeArray.array = Memory_Alloc_Array( double,
+					self->_entryTbl[entry_I].value.as.typeArray.size,"VariableAllVC->_entryTbl[].value.as.typeArray.array" );
+					
+				for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+				{
+					valueElement = Dictionary_Entry_Value_GetElement(valueEntry, i);
+					self->_entryTbl[entry_I].value.as.typeArray.array[i] = 
+						Dictionary_Entry_Value_AsDouble(valueElement);
+				}
+			}
+			else if( !strcasecmp( valType, "double" ) || !strcasecmp( valType, "d" ) || !strcasecmp( valType, "float" ) || !strcasecmp( valType, "f" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+			else if( !strcasecmp( valType, "integer" ) || !strcasecmp( valType, "int" ) || !strcasecmp( valType, "i" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Int;
+				self->_entryTbl[entry_I].value.as.typeInt = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "short" ) || !strcasecmp( valType, "s" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Short;
+				self->_entryTbl[entry_I].value.as.typeShort = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "char" ) || !strcasecmp( valType, "c" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Char;
+				self->_entryTbl[entry_I].value.as.typeChar = Dictionary_Entry_Value_AsUnsignedInt( valueEntry );
+			}
+			else if( !strcasecmp( valType, "pointer" ) || !strcasecmp( valType, "ptr" ) || !strcasecmp( valType, "p" ) ) {
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Ptr;
+				self->_entryTbl[entry_I].value.as.typePtr = (void*) ( (ArithPointer) Dictionary_Entry_Value_AsUnsignedInt( valueEntry ));
+			}
+			else {
+				/* Assume double */
+				Journal_DPrintf( Journal_Register( InfoStream_Type, "myStream" ), "Type to variable on variable condition not given, assuming double\n" );
+				self->_entryTbl[entry_I].value.type = VC_ValueType_Double;
+				self->_entryTbl[entry_I].value.as.typeDouble = Dictionary_Entry_Value_AsDouble( valueEntry );
+			}
+		}
+	}
+	else
+	{
+		self->_entryCount = 0;
+		self->_entryTbl = NULL;
+	}
+}
+
+
+void _VariableAllVC_Delete( void* allElementsVC ) {
+	VariableAllVC*				self = (VariableAllVC*)allElementsVC;
+	
+	if (self->_entryTbl) Memory_Free(self->_entryTbl);
+	
+	/* Stg_Class_Delete parent */
+	_VariableCondition_Delete(self);
+}
+
+
+void _VariableAllVC_Print( void* allElementsVC, Stream* stream ) {
+	VariableAllVC*				self = (VariableAllVC*)allElementsVC;
+	VariableAllVC_Entry_Index		entry_I;
+	Index					i;
+	
+	/* Set the Journal for printing informations */
+	Stream* info = stream;
+	
+	/* General info */
+	Journal_Printf( info, "VariableAllVC (ptr): %p\n", self);
+	
+	/* Print parent */
+	_VariableCondition_Print(self);
+
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( info, "\tdictionary (ptr): %p\n", self->dictionary);
+	Journal_Printf( info, "\t_dictionaryEntryName (ptr): %p\n", self->_dictionaryEntryName);
+	if (self->_dictionaryEntryName)
+		Journal_Printf( info, "\t\t_dictionaryEntryName: %s\n", self->_dictionaryEntryName);
+	Journal_Printf( info, "\t_entryCount: %u\n", self->_entryCount);
+	Journal_Printf( info, "\t_entryTbl (ptr): %p\n", self->_entryTbl);
+	if( self->_entryTbl ) {
+		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
+		{
+			Journal_Printf( info, "\t\t_entryTbl[%u]:\n", entry_I);
+			Journal_Printf( info, "\t\t\tvarName (ptr): %p\n", self->_entryTbl[entry_I].varName);
+			if (self->_entryTbl[entry_I].varName)
+				Journal_Printf( info, "\t\t\t\tvarName: %s\n", self->_entryTbl[entry_I].varName);
+			Journal_Printf( info, "\t\t\tvalue:\n");
+			switch (self->_entryTbl[entry_I].value.type)
+			{
+				case VC_ValueType_Double:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Double\n" );
+					Journal_Printf( info, "\t\t\t\tasDouble: %g\n", self->_entryTbl[entry_I].value.as.typeDouble );
+					break;
+					
+				case VC_ValueType_Int:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Int\n" );
+					Journal_Printf( info, "\t\t\t\tasInt: %i\n", self->_entryTbl[entry_I].value.as.typeInt );
+					break;
+					
+				case VC_ValueType_Short:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Short\n" );
+					Journal_Printf( info, "\t\t\t\tasShort: %i\n", self->_entryTbl[entry_I].value.as.typeShort );
+					break;
+					
+				case VC_ValueType_Char:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Char\n");
+					Journal_Printf( info, "\t\t\t\tasChar: %c\n", self->_entryTbl[entry_I].value.as.typeChar );
+					break;
+					
+				case VC_ValueType_Ptr:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_Ptr\n");
+					Journal_Printf( info, "\t\t\t\tasPtr: %g\n", self->_entryTbl[entry_I].value.as.typePtr );
+					break;
+					
+				case VC_ValueType_DoubleArray:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_DoubleArray\n");
+					Journal_Printf( info, "\t\t\t\tarraySize: %u\n", self->_entryTbl[entry_I].value.as.typeArray.size);
+					Journal_Printf( info, "\t\t\t\tasDoubleArray (ptr): %p\n", 
+						self->_entryTbl[entry_I].value.as.typeArray.array);
+					if (self->_entryTbl[entry_I].value.as.typeArray.array)
+						for (i = 0; i < self->_entryTbl[entry_I].value.as.typeArray.size; i++)
+							Journal_Printf( info, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->_entryTbl[entry_I].value.as.typeArray.array[i]);
+					break;
+					
+				case VC_ValueType_CFIndex:
+					Journal_Printf( info, "\t\t\t\ttype: VC_ValueType_CFIndex\n");
+					Journal_Printf( info, "\t\t\t\tasCFIndex: %u\n", self->_entryTbl[entry_I].value.as.typeCFIndex);
+					break;
+			}
+		}
+	}
+}
+
+
+void* _VariableAllVC_Copy( void* allElementsVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	VariableAllVC*		self = (VariableAllVC*)allElementsVC;
+	VariableAllVC*		newVariableAllVC;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newVariableAllVC = (VariableAllVC*)_VariableCondition_Copy( self, dest, deep, nameExt, map );
+	
+	newVariableAllVC->_dictionaryEntryName = self->_dictionaryEntryName;
+	newVariableAllVC->_entryCount = self->_entryCount;
+	
+	if( deep ) {
+		newVariableAllVC->data = Stg_Class_Copy( self->data, NULL, deep, nameExt, map );
+		
+		if( (newVariableAllVC->_entryTbl = PtrMap_Find( map, self->_entryTbl )) == NULL && self->_entryTbl ) {
+			newVariableAllVC->_entryTbl = Memory_Alloc_Array( VariableAllVC_Entry, newVariableAllVC->_entryCount, "VariableAllVC->_entryTbl");
+			memcpy( newVariableAllVC->_entryTbl, self->_entryTbl, sizeof(VariableAllVC_Entry) * newVariableAllVC->_entryCount );
+			PtrMap_Append( map, newVariableAllVC->_entryTbl, self->_entryTbl );
+		}
+	}
+	else {
+		newVariableAllVC->data = self->data;
+		newVariableAllVC->_entryTbl = self->_entryTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newVariableAllVC;
+}
+
+
+void _VariableAllVC_Build( void* allElementsVC, void* data ) {
+	VariableAllVC*		self = (VariableAllVC*)allElementsVC;
+	
+	_VariableAllVC_BuildSelf( self, data );
+	
+	_VariableCondition_Build( self, data );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+void _VariableAllVC_BuildSelf( void* allElementsVC, void* data ) {
+	VariableAllVC*		self = (VariableAllVC*)allElementsVC;
+	
+	if( self->data ) {
+		Build( self->data, data, False );
+	}
+}
+
+
+IndexSet* _VariableAllVC_GetSet( void* variableCondition ) {
+	VariableAllVC*				self = (VariableAllVC*)variableCondition;
+	Variable*				var = self->variable_Register->_variable[0];
+	IndexSet*				set = IndexSet_New( var->arraySize );
+	
+	IndexSet_AddAll( set );
+	
+	return set;
+}
+
+
+VariableCondition_VariableIndex _VariableAllVC_GetVariableCount( void* variableCondition, Index globalIndex ) {
+	VariableAllVC*	self = (VariableAllVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+Variable_Index _VariableAllVC_GetVariableIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex) 
+{
+	VariableAllVC*	self = (VariableAllVC*)variableCondition;
+	
+	return Variable_Register_GetIndex(self->variable_Register, self->_entryTbl[varIndex].varName);
+}
+
+
+VariableCondition_ValueIndex _VariableAllVC_GetValueIndex(
+		void*				variableCondition, 
+		Index				globalIndex, 
+		VariableCondition_VariableIndex	varIndex)
+{
+	return varIndex;
+}
+
+
+VariableCondition_ValueIndex _VariableAllVC_GetValueCount( void* variableCondition ) {
+	VariableAllVC*	self = (VariableAllVC*)variableCondition;
+	
+	return self->_entryCount;
+}
+
+
+VariableCondition_Value _VariableAllVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex ) {
+	VariableAllVC*	self = (VariableAllVC*)variableCondition;
+
+	return self->_entryTbl[valIndex].value;
+}
+
+void _VariableAllVC_PrintConcise( void* variableCondition, Stream* stream ) {
+	VariableAllVC*		self = (VariableAllVC*)variableCondition;
+	
+	Journal_Printf( stream, "\ttype: %s, set: all\n", self->type );
+}
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,194 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: VariableAllVC.h 2509 2005-01-10 23:39:07Z LukeHodkinson $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_VariableAllVC_h__
+#define __Base_Automation_VariableAllVC_h__
+	
+
+	extern const Type VariableAllVC_Type;
+	
+	
+	#define __VariableAllVC_Entry \
+		Name				varName; \
+		VariableCondition_Value		value; \
+		
+	struct _VariableAllVC_Entry { __VariableAllVC_Entry };
+	
+	
+	#define __VariableAllVC \
+		/* General info */ \
+		__VariableCondition \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		Name				_dictionaryEntryName; \
+		VariableAllVC_Entry_Index	_entryCount; \
+		VariableAllVC_Entry*		_entryTbl; \
+		void*				data;
+
+	struct _VariableAllVC { __VariableAllVC };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		VariableAllVC_Factory(
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register, 
+						Dictionary*					dictionary,
+						void*						data );
+	
+	VariableAllVC*			VariableAllVC_New(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	void				VariableAllVC_Init(
+						Name						name,
+						Name						_dictionaryEntryName, 
+						VariableAllVC*					self,
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	VariableAllVC*			VariableAllVC_DefaultNew( Name name );
+	
+	VariableAllVC*			_VariableAllVC_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*				_delete,
+						Stg_Class_PrintFunction*				_print,
+						Stg_Class_CopyFunction*				_copy, 
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*		_construct,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*			_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*		_destroy,
+						Name						name,
+						Bool						initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc*		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						Name						_dictionaryEntryName, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary,
+						void*						mesh );
+	
+	void				_VariableAllVC_Init(
+						void*						allElementsVC, 
+						Name						_dictionaryEntryName, 
+						void*						mesh );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_VariableAllVC_Delete( void* allElementsVC );
+	
+	void				_VariableAllVC_Print( void* allElementsVC, Stream* stream );
+	
+	/* Copy */
+	#define VariableAllVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define VariableAllVC_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _VariableAllVC_Copy( void* allElementsVC, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	void				_VariableAllVC_Build( void* allElementsVC, void* data );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	void				_VariableAllVC_BuildSelf( void* allElementsVC, void* data );
+	
+	void				_VariableAllVC_ReadDictionary( void* variableCondition, void* dictionary );
+	
+	IndexSet*			_VariableAllVC_GetSet( void* variableCondition );
+	
+	VariableCondition_VariableIndex	_VariableAllVC_GetVariableCount( void* variableCondition, Index globalIndex );
+	
+	Variable_Index			_VariableAllVC_GetVariableIndex(
+						void*					variableCondition,
+						Index					globalIndex, 
+						VariableCondition_VariableIndex		varIndex );
+						
+	VariableCondition_ValueIndex	_VariableAllVC_GetValueIndex(
+						void*					variableCondition, 
+						Index					globalIndex, 
+						VariableCondition_VariableIndex		varIndex );
+						
+	VariableCondition_ValueIndex	_VariableAllVC_GetValueCount( void* variableCondition );
+	
+	VariableCondition_Value		_VariableAllVC_GetValue( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	void				_VariableAllVC_PrintConcise( void* variableCondition, Stream* stream );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+
+	
+#endif /* __Base_Automation_VariableAllVC_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableAllVC.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">VariableAllVC</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">VariableCondition</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,731 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: VariableCondition.c 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Stg_ComponentFactory.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+#include "ConditionFunction.h"
+#include "ConditionFunction_Register.h"
+#include "VariableCondition.h"
+
+#include <string.h>
+#include <assert.h>
+
+/** Textual name of this class */
+const Type VariableCondition_Type = "VariableCondition";
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+VariableCondition* _VariableCondition_New( 
+			SizeT						_sizeOfSelf, 
+			Type						type,
+			Stg_Class_DeleteFunction*				_delete,
+			Stg_Class_PrintFunction*				_print, 
+			Stg_Class_CopyFunction*				_copy, 
+			Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+			Stg_Component_ConstructFunction*		_construct,
+			Stg_Component_BuildFunction*			_build,
+			Stg_Component_InitialiseFunction*			_initialise,
+			Stg_Component_ExecuteFunction*			_execute,
+			Stg_Component_DestroyFunction*		_destroy,
+			Name							name,
+			Bool							initFlag,
+			VariableCondition_BuildSelfFunc*		_buildSelf, 
+			VariableCondition_PrintConciseFunc*		_printConcise,
+			VariableCondition_ReadDictionaryFunc*		_readDictionary,
+			VariableCondition_GetSetFunc*			_getSet,
+			VariableCondition_GetVariableCountFunc		_getVariableCount,
+			VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+			VariableCondition_GetValueIndexFunc*		_getValueIndex,
+			VariableCondition_GetValueCountFunc*		_getValueCount,
+			VariableCondition_GetValueFunc*			_getValue,
+			Variable_Register*				variable_Register,
+			ConditionFunction_Register*			conFunc_Register,
+			Dictionary*					dictionary )
+{
+	VariableCondition*	self;
+	
+	/* Allocate memory/General info */
+	assert(_sizeOfSelf >= sizeof(VariableCondition));
+	self = (VariableCondition*)_Stg_Component_New( _sizeOfSelf, type, _delete, _print, _copy,  _defaultConstructor, 
+												_construct, _build, _initialise, _execute, _destroy, name, NON_GLOBAL );
+	
+	/* Virtual info */
+	self->_buildSelf = _buildSelf;
+	self->_printConcise = _printConcise;
+	self->_readDictionary = _readDictionary;
+	self->_getSet = _getSet;
+	self->_getVariableCount = _getVariableCount;
+	self->_getVariableIndex = _getVariableIndex;
+	self->_getValueIndex = _getValueIndex;
+	self->_getValueCount = _getValueCount;
+	self->_getValue = _getValue;
+	
+	/* Stg_Class info */
+	if( initFlag ){
+		_VariableCondition_Init( self, variable_Register, conFunc_Register, dictionary );
+	}
+	
+	return self;
+}
+
+
+void _VariableCondition_Init(
+		void*				variableCondition, 
+		Variable_Register*		variable_Register, 
+		ConditionFunction_Register*	conFunc_Register,
+		Dictionary*			dictionary )
+{
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	
+	self->isConstructed = True;
+	self->variable_Register = variable_Register;
+	self->conFunc_Register = conFunc_Register;
+	self->dictionary = dictionary;
+	self->_set = NULL;
+	self->indexCount = 0;
+	self->indexTbl = NULL;
+	self->vcVarCountTbl = NULL;
+	self->vcTbl = NULL;
+	self->valueCount = 0;
+	self->valueTbl = NULL;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _VariableCondition_Delete(void* variableCondition)
+{
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	
+	if (self->_set) Stg_Class_Delete(self->_set);
+	if (self->indexTbl) Memory_Free(self->indexTbl);
+	if (self->vcVarCountTbl) Memory_Free(self->vcVarCountTbl);
+	if (self->valueTbl) Memory_Free(self->valueTbl);
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Component_Delete( self );
+}
+
+
+void _VariableCondition_Print(void* variableCondition)
+{
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	VariableCondition_VariableIndex	vcVar_I;
+	VariableCondition_ValueIndex	val_I;
+	Index				i;
+	
+	/* Set the Journal for printing informations */
+	Stream* variableConditionStream = Journal_Register( InfoStream_Type,	"VariableConditionStream");
+	
+	/* General info */
+	Journal_Printf( variableConditionStream, "VariableCondition (ptr): %p\n", self);
+	
+	/* Print parent */
+	_Stg_Component_Print( self, variableConditionStream );
+	
+	/* Virtual info */
+	Journal_Printf( variableConditionStream, "\t_getSet (func ptr): %p\n", self->_getSet);
+	Journal_Printf( variableConditionStream, "\t_getVariableCount (func ptr): %p\n", self->_getVariableCount);
+	Journal_Printf( variableConditionStream, "\t_getVariableIndex (func ptr): %p\n", self->_getVariableIndex);
+	Journal_Printf( variableConditionStream, "\t_getValueIndex (func ptr): %p\n", self->_getValueIndex);
+	Journal_Printf( variableConditionStream, "\t_getValueCount (func ptr): %p\n", self->_getValueCount);
+	Journal_Printf( variableConditionStream, "\t_getValue (func ptr): %p\n", self->_getValue);
+	
+	/* Stg_Class info */
+	Journal_Printf( variableConditionStream, "\tvariable_Register (ptr): %p\n", self->variable_Register);
+	Journal_Printf( variableConditionStream, "\tconFunc_Register (ptr): %p\n", self->conFunc_Register);
+	Journal_Printf( variableConditionStream, "\t_set (ptr): %p\n", self->_set);
+	Journal_Printf( variableConditionStream, "\tindexCount: %u\n", self->indexCount);
+	Journal_Printf( variableConditionStream, "\tindexTbl (ptr): %p\n", self->indexTbl);
+	if (self->indexTbl)
+		for (i = 0; i < self->indexCount; i++)
+			Journal_Printf( variableConditionStream, "\t\tindexTbl[%u]: %u\n", i, self->indexTbl[i]);
+	Journal_Printf( variableConditionStream, "\tvcVarCountTbl (ptr): %p\n", self->vcVarCountTbl);
+	if (self->vcVarCountTbl)
+		for (i = 0; i < self->indexCount; i++)
+			Journal_Printf( variableConditionStream, "\t\tvcVarCountTbl[%u]: %u\n", i, self->vcVarCountTbl[i]);
+	Journal_Printf( variableConditionStream, "\tvcTbl (ptr): %p\n", self->vcTbl);
+	if (self->vcTbl)
+		for (i = 0; i < self->indexCount; i++)
+			for (vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++)
+			{
+				Journal_Printf( variableConditionStream, "\t\tvcTbl[%u][%u]:\n", i, vcVar_I);
+				Journal_Printf( variableConditionStream, "\t\t\tvarIndex: %u\n", self->vcTbl[i][vcVar_I].varIndex);
+				Journal_Printf( variableConditionStream, "\t\t\tvalIndex: %u\n", self->vcTbl[i][vcVar_I].valIndex);
+			}
+	Journal_Printf( variableConditionStream, "\tvalueCount: %u\n", self->valueCount);
+	Journal_Printf( variableConditionStream, "\tvalueTbl (ptr): %p\n", self->valueTbl);
+	if( self->valueTbl ) {
+		for (val_I = 0; val_I < self->valueCount; val_I++)
+		{
+			Journal_Printf( variableConditionStream, "\t\tvalueTbl[%u]:\n", val_I);
+			switch (self->valueTbl[val_I].type)
+			{
+				case VC_ValueType_Double:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Double\n" );
+					Journal_Printf( variableConditionStream, "\t\t\tasDouble: %g\n", self->valueTbl[val_I].as.typeDouble );
+					break;
+					
+				case VC_ValueType_Int:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Int\n" );
+					Journal_Printf( variableConditionStream, "\t\t\tasInt: %i\n", self->valueTbl[val_I].as.typeInt );
+					break;
+					
+				case VC_ValueType_Short:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Short\n" );
+					Journal_Printf( variableConditionStream, "\t\t\tasShort: %i\n", self->valueTbl[val_I].as.typeShort );
+					break;
+					
+				case VC_ValueType_Char:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Char\n");
+					Journal_Printf( variableConditionStream, "\t\t\tasChar: %c\n", self->valueTbl[val_I].as.typeChar );
+					break;
+					
+				case VC_ValueType_Ptr:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_Ptr\n");
+					Journal_Printf( variableConditionStream, "\t\t\tasPtr: %g\n", self->valueTbl[val_I].as.typePtr );
+					break;
+					
+				case VC_ValueType_DoubleArray:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_DoubleArray\n");
+					Journal_Printf( variableConditionStream, "\t\t\tarraySize: %u\n", self->valueTbl[val_I].as.typeArray.size);
+					Journal_Printf( variableConditionStream, "\t\t\tasDoubleArray (ptr): %p\n", self->valueTbl[val_I].as.typeArray.array);
+					if (self->valueTbl[val_I].as.typeArray.array)
+						for (i = 0; i < self->valueTbl[val_I].as.typeArray.size; i++)
+							Journal_Printf( variableConditionStream, "\t\t\t\tasDoubleArray[%u]: %g\n", i,
+								self->valueTbl[val_I].as.typeArray.array[i]);
+					break;
+					
+				case VC_ValueType_CFIndex:
+					Journal_Printf( variableConditionStream, "\t\t\ttype: VC_ValueType_CFIndex\n");
+					Journal_Printf( variableConditionStream, "\t\t\tasCFIndex: %u\n", self->valueTbl[val_I].as.typeCFIndex);
+					break;
+			}
+		}
+	}
+}
+
+
+void* _VariableCondition_Copy( void* variableCondition, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	VariableCondition*	newVariableCondition;
+	PtrMap*			map = ptrMap;
+	Bool			ownMap = False;
+	
+	if( !map ) {
+		map = PtrMap_New( 10 );
+		ownMap = True;
+	}
+	
+	newVariableCondition = (VariableCondition*)_Stg_Component_Copy( self, dest, deep, nameExt, map );
+	
+	/* Virtual methods */
+	newVariableCondition->_buildSelf = self->_buildSelf;
+	newVariableCondition->_printConcise = self->_printConcise;
+	newVariableCondition->_readDictionary = self->_readDictionary;
+	newVariableCondition->_getSet = self->_getSet;
+	newVariableCondition->_getVariableCount = self->_getVariableCount;
+	newVariableCondition->_getVariableIndex = self->_getVariableIndex;
+	newVariableCondition->_getValueIndex = self->_getValueIndex;
+	newVariableCondition->_getValueCount = self->_getValueCount;
+	newVariableCondition->_getValue = self->_getValue;
+	
+	newVariableCondition->variable_Register = self->variable_Register;
+	newVariableCondition->conFunc_Register = self->conFunc_Register;
+	newVariableCondition->dictionary = self->dictionary;
+	newVariableCondition->indexCount = self->indexCount;
+	newVariableCondition->valueCount = self->valueCount;
+	
+	if( deep ) {
+		newVariableCondition->_set = (IndexSet*)Stg_Class_Copy( self->_set, NULL, deep, nameExt, map );
+		
+		if( (newVariableCondition->indexTbl = PtrMap_Find( map, self->indexTbl )) == NULL && self->indexTbl ) {
+			newVariableCondition->indexTbl = (Index*)Memory_Alloc_Array( Index, newVariableCondition->indexCount, "VariableCondition->indexTbl" );
+			memcpy( newVariableCondition->indexTbl, self->indexTbl, sizeof(Index) * newVariableCondition->indexCount );
+			PtrMap_Append( map, newVariableCondition->indexTbl, self->indexTbl );
+		}
+		
+		if( (newVariableCondition->vcVarCountTbl = PtrMap_Find( map, self->vcVarCountTbl )) == NULL && self->vcVarCountTbl ) {
+			newVariableCondition->vcVarCountTbl = Memory_Alloc_Array( VariableCondition_VariableIndex, newVariableCondition->indexCount, "VC->vcVarCountTbl" );
+			memcpy( newVariableCondition->vcVarCountTbl, self->vcVarCountTbl, sizeof(VariableCondition_VariableIndex) * newVariableCondition->indexCount );
+			PtrMap_Append( map, newVariableCondition->vcVarCountTbl, self->vcVarCountTbl );
+		}
+		
+		if( (newVariableCondition->vcTbl = PtrMap_Find( map, self->vcTbl )) == NULL && self->vcTbl ) {
+			Index	idx_I;
+			
+			newVariableCondition->vcTbl = Memory_Alloc_2DComplex( VariableCondition_Tuple, newVariableCondition->indexCount, newVariableCondition->vcVarCountTbl, "VC->vcTbl" );
+			for( idx_I = 0; idx_I < newVariableCondition->indexCount; idx_I++ ) {
+				memcpy( newVariableCondition->vcTbl[idx_I], self->vcTbl[idx_I], sizeof(VariableCondition_Tuple) * newVariableCondition->vcVarCountTbl[idx_I] );
+			}
+			PtrMap_Append( map, newVariableCondition->vcTbl, self->vcTbl );
+		}
+		
+		if( (newVariableCondition->valueTbl = PtrMap_Find( map, self->valueTbl )) == NULL && self->valueTbl ) {
+			newVariableCondition->valueTbl = Memory_Alloc_Array( VariableCondition_Value, newVariableCondition->valueCount, "VC->valueTbl" );
+			memcpy( newVariableCondition->valueTbl, self->valueTbl, sizeof(VariableCondition_Value) * newVariableCondition->indexCount );
+			PtrMap_Append( map, newVariableCondition->valueTbl, self->valueTbl );
+		}
+	}
+	else {
+		newVariableCondition->_set = self->_set;
+		newVariableCondition->indexTbl = self->indexTbl;
+		newVariableCondition->vcVarCountTbl = self->vcVarCountTbl;
+		newVariableCondition->vcTbl = self->vcTbl;
+		newVariableCondition->valueTbl = self->valueTbl;
+	}
+	
+	if( ownMap ) {
+		Stg_Class_Delete( map );
+	}
+	
+	return (void*)newVariableCondition;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+void _VariableCondition_Construct( void* variableCondition, Stg_ComponentFactory* cf, void* data )
+{
+	
+}
+
+void _VariableCondition_Build( void* variableCondition, void* data ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	VariableCondition_ValueIndex	val_I;
+	Index				i;
+	
+	/* Read the dictionary */
+	self->_readDictionary( self, self->dictionary );
+	
+	/* Obtain the set */
+	self->_set = self->_getSet(self);
+	if (self->_set)
+		IndexSet_GetMembers(self->_set, &self->indexCount, &self->indexTbl);
+	else
+	{
+		self->indexCount = 0;
+		self->indexTbl = NULL;
+	}
+	
+	/* Only build the index related tables if there are active BCs */
+	if ( self->indexCount ) {
+		/* Build the variable to condition table */
+		self->vcVarCountTbl = Memory_Alloc_Array( VariableCondition_VariableIndex, self->indexCount, "VC->vcVarCountTbl" );
+		
+		for (i = 0; i < self->indexCount; i++)
+		{
+			/* For the index, get the number of "variables" that have been assigned conditions */
+			self->vcVarCountTbl[i] = self->_getVariableCount(self, self->indexTbl[i]);
+		}
+
+		self->vcTbl = Memory_Alloc_2DComplex( VariableCondition_Tuple, self->indexCount, self->vcVarCountTbl, "VC->vcTbl" );
+		for ( i = 0; i < self->indexCount; i++ )
+		{
+			VariableCondition_VariableIndex vcVar_I;
+
+			for ( vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++ )
+			{
+				Variable* var;
+
+				/* For the index's variable, get the variable i.d. and value i.d. */
+				self->vcTbl[i][vcVar_I].varIndex = self->_getVariableIndex(self, self->indexTbl[i], vcVar_I);
+				self->vcTbl[i][vcVar_I].valIndex = self->_getValueIndex(self, self->indexTbl[i], vcVar_I);
+
+				/* Force the building of the variable (to be safe) */
+				var = self->variable_Register->_variable[self->vcTbl[i][vcVar_I].varIndex];
+				Build( var, data, False );
+			}
+		}
+	}	
+
+	self->valueCount = self->_getValueCount(self);
+	self->valueTbl = Memory_Alloc_Array( VariableCondition_Value, self->valueCount, "VC->valueTbl" );
+	for (val_I = 0; val_I < self->valueCount; val_I++)
+		self->valueTbl[val_I] = self->_getValue(self, val_I);
+}
+
+void _VariableCondition_Initialise( void* variableCondition, void* data ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	Index				i;
+	
+	for( i = 0; i < self->indexCount; i++ ) {
+		VariableCondition_VariableIndex	vcVar_I;
+		
+		for( vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++ ) {
+			Variable* var;
+			
+			/* Force the building of the variable (to be safe) */
+			var = self->variable_Register->_variable[self->vcTbl[i][vcVar_I].varIndex];
+			Initialise( var, data, False );
+		}
+	}
+}
+
+void _VariableCondition_Execute( void* variableCondition, void* data ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	
+	VariableCondition_Apply( self, data );
+}
+
+void _VariableCondition_Destroy( void* variableCondition, void* data )
+{
+	
+}
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+void VariableCondition_Apply( void* variableCondition, void* context ) {
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	Index			i;
+	
+	for (i = 0; i < self->indexCount; i++)
+		VariableCondition_ApplyToIndex(variableCondition, self->indexTbl[i], context);
+}
+
+
+void VariableCondition_ApplyToVariable( void* variableCondition, VariableCondition_VariableIndex varIndex, void* context ) {
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	Index			i;
+	
+	for (i = 0; i < self->indexCount; i++)
+		VariableCondition_ApplyToIndexVariable(variableCondition, self->indexTbl[i], varIndex, context);
+}
+
+
+void VariableCondition_ApplyToIndex( void* variableCondition, Index localIndex, void* context ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	Variable*			var;
+	Variable_Index			varIndex;
+	VariableCondition_ValueIndex	val_I;
+	ConditionFunction*		cf;
+	Index				index, i;
+	Stream*				errorStr = Journal_Register( Error_Type, self->type );
+	
+	/* Ensure that the index provided (localIndex) has a condition attached to it */
+	for (index = 0; index < self->indexCount; index++)
+		if (self->indexTbl[index] == localIndex)
+			break;
+	if (index == self->indexCount)
+		return;
+	
+	/* For each variable that has a condition at this index */
+	for (i = 0; i < self->vcVarCountTbl[index]; i++)
+	{
+		varIndex = self->vcTbl[index][i].varIndex;
+		assert( varIndex != (unsigned)-1 );
+		
+		var = self->variable_Register->_variable[varIndex];
+		
+		val_I = self->vcTbl[index][i].valIndex;
+		assert( val_I != (unsigned)-1 );
+		
+		switch (self->valueTbl[val_I].type)
+		{
+			case VC_ValueType_Double:
+				Journal_Firewall( var->dataTypeCounts[0] == 1, errorStr,
+					"Error - in %s: while applying values for variable condition "
+					"\"%s\", to index %d - asked to apply a scalar %s to Variable \"%s\" "
+					"which has %d components. Specify a scalar Variable instead.\n",
+					__func__, self->name, self->indexTbl[index], "double",
+					var->name, var->dataTypeCounts[0] );
+				Variable_SetValueDouble(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeDouble );
+				break;
+			
+			case VC_ValueType_DoubleArray:
+				Variable_SetValue(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeArray.array );
+				break;
+			
+			case VC_ValueType_CFIndex:
+				Journal_Firewall( self->valueTbl[val_I].as.typeCFIndex != (unsigned)-1, errorStr,
+					"Error - in %s: trying to apply to index %d of variable \"%s\", which "
+					"is supposed to be a condition function, but the cond. func. wasn't "
+					"found in the c.f. register.\n", __func__, localIndex, var->name );
+				cf = self->conFunc_Register->_cf[self->valueTbl[val_I].as.typeCFIndex];
+				ConditionFunction_Apply(
+					cf, 
+					localIndex, 
+					varIndex, 
+					context, 
+					Variable_GetStructPtr( var, self->indexTbl[index] ) );
+				break;
+			
+			case VC_ValueType_Int:
+				Journal_Firewall( var->dataTypeCounts[0] == 1, errorStr,
+					"Error - in %s: while applying values for variable condition "
+					"\"%s\", to index %d - asked to apply a scalar %s to Variable \"%s\" "
+					"which has %d components. Specify a scalar Variable instead.\n",
+					__func__, self->name, self->indexTbl[index], "int",
+					var->name, var->dataTypeCounts[0] );
+				Variable_SetValueInt(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeInt );
+				break;
+			
+			case VC_ValueType_Short:
+				Journal_Firewall( var->dataTypeCounts[0] == 1, errorStr,
+					"Error - in %s: while applying values for variable condition "
+					"\"%s\", to index %d - asked to apply a scalar %s to Variable \"%s\" "
+					"which has %d components. Specify a scalar Variable instead.\n",
+					__func__, self->name, self->indexTbl[index], "short",
+					var->name, var->dataTypeCounts[0] );
+				Variable_SetValueShort(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeShort );
+				break;
+			
+			case VC_ValueType_Char:
+				Journal_Firewall( var->dataTypeCounts[0] == 1, errorStr,
+					"Error - in %s: while applying values for variable condition "
+					"\"%s\", to index %d - asked to apply a scalar %s to Variable \"%s\" "
+					"which has %d components. Specify a scalar Variable instead.\n",
+					__func__, self->name, self->indexTbl[index], "char",
+					var->name, var->dataTypeCounts[0] );
+				Variable_SetValueChar(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typeChar );
+				break;
+			
+			case VC_ValueType_Ptr:
+				Variable_SetValuePointer(
+					var, 
+					self->indexTbl[index], 
+					self->valueTbl[val_I].as.typePtr );
+				break;
+			
+			default:
+				assert(0);
+				break;
+		}
+	}
+}
+
+
+void VariableCondition_ApplyToIndexVariable(
+		void*				variableCondition, 
+		Index				localIndex, 
+		VariableCondition_VariableIndex	varIndex,
+		void*				context )
+{
+	VariableCondition*	self = (VariableCondition*)variableCondition;
+	Variable_Index		globalVarIndex;
+	Variable*		var;
+	ConditionFunction*	cf;
+	Index			index;
+	
+	for (index = 0; index < self->indexCount; index++)
+		if (self->indexTbl[index] == localIndex)
+			break;
+			
+	if (index == self->indexCount)
+		return;
+	
+	globalVarIndex = self->vcTbl[index][varIndex].varIndex;
+	var = self->variable_Register->_variable[globalVarIndex];
+		
+	switch (self->valueTbl[self->vcTbl[index][varIndex].valIndex].type)
+	{
+		case VC_ValueType_Double:
+			Variable_SetValueDouble(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeDouble );
+			break;
+		
+		case VC_ValueType_CFIndex:
+			cf = self->conFunc_Register->_cf[self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeCFIndex];
+			ConditionFunction_Apply( 
+				cf, 
+				localIndex, 
+				globalVarIndex, 
+				context, 
+				Variable_GetStructPtr( var, self->indexTbl[index]) );
+			break;
+		
+		case VC_ValueType_DoubleArray:
+			Variable_SetValue(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeArray.array );
+			break;
+		
+		case VC_ValueType_Int:
+			Variable_SetValueInt(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeInt );
+			break;
+		
+		case VC_ValueType_Short:
+			Variable_SetValueShort(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeShort );
+			break;
+		
+		case VC_ValueType_Char:
+			Variable_SetValueChar(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typeChar );
+			break;
+		
+		case VC_ValueType_Ptr:
+			Variable_SetValuePointer(
+				var, 
+				self->indexTbl[index], 
+				self->valueTbl[self->vcTbl[index][varIndex].valIndex].as.typePtr );
+			break;
+		
+		default:
+			assert(0);
+			break;
+	}
+}
+
+
+Bool VariableCondition_IsCondition( void* variableCondition, Index localIndex, Variable_Index varIndex ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	VariableCondition_VariableIndex	vcVar_I;
+	Index				i;
+	
+
+	/* if the set isn't initialised, this is a NULL BC : False */
+	if ( !self->_set ) {
+		return False;
+	}
+
+	/* first check if the index they've given us is actually in the list this VC applies to */
+	/* quick check, since we have the set available */
+	if ( localIndex >= self->_set->size ) {
+		Stream* warning = Journal_Register( ErrorStream_Type, self->type );
+		Journal_Printf( warning, "Error- In %s: Tried to check an index %d larger than the size of "
+			"the set (%d).\n", __func__, localIndex, self->_set->size );
+		assert(0);	
+		return False;
+	}
+	if ( !IndexSet_IsMember( self->_set, localIndex ) ) {
+		return False;
+	}
+	for (i = 0; i < self->indexCount; i++)
+		if (self->indexTbl[i] == localIndex)
+			break;
+			
+	if (i == self->indexCount)
+		return False;
+	
+	/* now check if the Variable they've given us is actually in the list to apply at the given index */
+	for (vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++)
+		if (self->vcTbl[i][vcVar_I].varIndex == varIndex)
+			return True;
+	
+	return False;
+}
+
+
+VariableCondition_ValueIndex VariableCondition_GetValueIndex (void* variableCondition, Index localIndex, Variable_Index varIndex )
+{
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	VariableCondition_VariableIndex	vcVar_I;
+	Index				i;
+	
+	/* if the set isn't initialised, this is a NULL BC : False */
+	if ( !self->_set ) {
+		return False;
+	}
+
+	/* first check if the index they've given us is actually in the list this VC applies to */
+	/* quick check, since we have the set available */
+	if ( localIndex >= self->_set->size ) {
+		Stream* warning = Journal_Register( ErrorStream_Type, self->type );
+		Journal_Printf( warning, "Error- In %s: Tried to check an index %d larger than the size of "
+			"the set (%d).\n", __func__, localIndex, self->_set->size );
+		assert(0);	
+		return False;
+	}
+	if ( !IndexSet_IsMember( self->_set, localIndex ) ) {
+		return (VariableCondition_ValueIndex)-1;
+	}
+	for (i = 0; i < self->indexCount; i++)
+		if (self->indexTbl[i] == localIndex)
+			break;
+			
+	if (i == self->indexCount)
+		return (VariableCondition_ValueIndex)-1;
+	
+	/* now check if the Variable they've given us is actually in the list to apply at the given index */
+	for (vcVar_I = 0; vcVar_I < self->vcVarCountTbl[i]; vcVar_I++)
+		if (self->vcTbl[i][vcVar_I].varIndex == varIndex)
+			return self->vcTbl[i][vcVar_I].valIndex;
+	
+	return (VariableCondition_ValueIndex)-1;
+}
+
+
+void VariableCondition_PrintConcise( void* variableCondition, Stream* stream ) {
+	VariableCondition*		self = (VariableCondition*)variableCondition;
+	
+	self->_printConcise( self, stream );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,243 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Abstract class for specifying (1 or more) conditions that apply to (1 or more) variables in an array.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: VariableCondition.h 3851 2006-10-12 08:57:22Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_VariableCondition_h__
+#define __Base_Automation_VariableCondition_h__
+	
+	/** Textual name of this class */
+	extern const Type VariableCondition_Type;
+	
+	typedef void				(VariableCondition_BuildSelfFunc)		( void* variableCondition, void* data );
+	typedef void				(VariableCondition_PrintConciseFunc)		( void* variableCondition, Stream* stream );
+	typedef void				(VariableCondition_ReadDictionaryFunc)		( void* variableCondition, void* dictionary );
+	typedef IndexSet*			(VariableCondition_GetSetFunc)			( void* variableCondition );
+	typedef VariableCondition_VariableIndex	(VariableCondition_GetVariableCountFunc)	( void* variableCondition, Index index );
+	typedef Variable_Index			(VariableCondition_GetVariableIndexFunc)	( void* variableCondition, Index index, VariableCondition_VariableIndex condVar_I );
+	typedef VariableCondition_ValueIndex	(VariableCondition_GetValueIndexFunc)		( void* variableCondition, Index index, VariableCondition_VariableIndex condVar_I );
+	typedef VariableCondition_ValueIndex	(VariableCondition_GetValueCountFunc)		( void* variableCondition );
+	typedef VariableCondition_Value		(VariableCondition_GetValueFunc)		( void* variableCondition, VariableCondition_ValueIndex valIndex );
+	
+	
+	typedef struct {
+		Index			size;
+		double*			array;
+	} VariableCondition_Value_Array;
+	
+	typedef union { 
+		double				typeDouble;
+		int				typeInt;
+		short				typeShort;
+		char				typeChar;
+		void*				typePtr;
+		VariableCondition_Value_Array	typeArray;
+		ConditionFunction_Index		typeCFIndex;
+	} VariableCondition_Value_AsType;
+	
+	#define __VariableCondition_Value \
+		VariableCondition_ValueType	type; \
+		VariableCondition_Value_AsType	as;
+	struct _VariableCondition_Value { __VariableCondition_Value };
+	
+	
+	#define __VariableCondition_Tuple \
+		/** The variable index into VariableCondition::variable_Register identifying a variable */ \
+		Variable_Index				varIndex; \
+		/** The value index into VariableCondition::valueTbl identifying a value to apply to the variable */ \
+		VariableCondition_ValueIndex		valIndex; \
+	
+	/** Used to relate which Condition is applied to a Variable */
+	struct _VariableCondition_Tuple { __VariableCondition_Tuple };
+	
+	
+	#define __VariableCondition \
+		/* General info */ \
+		__Stg_Component \
+		\
+		/* Virtual info */ \
+		VariableCondition_BuildSelfFunc*		_buildSelf; \
+		VariableCondition_PrintConciseFunc*		_printConcise; \
+		VariableCondition_ReadDictionaryFunc*		_readDictionary; \
+		VariableCondition_GetSetFunc*			_getSet; \
+		VariableCondition_GetVariableCountFunc*		_getVariableCount; \
+		VariableCondition_GetVariableIndexFunc*		_getVariableIndex; \
+		VariableCondition_GetValueIndexFunc*		_getValueIndex; \
+		VariableCondition_GetValueCountFunc*		_getValueCount; \
+		VariableCondition_GetValueFunc*			_getValue; \
+		\
+		/* Stg_Class info */ \
+		/** Register of Variables that may be operated on. */ \
+		Variable_Register*				variable_Register; \
+		/** Register of Condition functions that may be applied. */ \
+		ConditionFunction_Register*			conFunc_Register; \
+		Dictionary*					dictionary; \
+		\
+		/** Set specifying which indexes in the client structure are being controlled by this VC. */ \
+		IndexSet*					_set; \
+		/** the number of indexes this VC applies to. */ \
+		Index						indexCount; \
+		/** Array, of size indexCount, containing the indexes this VC applies to. */ \
+		Index*						indexTbl; \
+		/** Array containing the number of variables at each index that are controlled by this VC */ \
+		VariableCondition_VariableIndex*		vcVarCountTbl; \
+		/** 2d Array, which for each index this VC controls, stores the VariableCondition_Tuple that relates
+		what condition is being applied to which Variable */ \
+		VariableCondition_Tuple**			vcTbl; \
+		/** Number of values in the valueTbl which will be applied somewhere using this VC */ \
+		VariableCondition_ValueIndex			valueCount; \
+		/** Array of values which are available to apply (which index/var pairs they apply to is determined
+		by VariableCondition::vcTbl). */ \
+		VariableCondition_Value*			valueTbl; \
+	
+	/** Abstract class for specifying (1 or more) conditions that apply to (1 or more) variables in an array - 
+	see VariableCondition.h for details */
+	struct _VariableCondition { __VariableCondition };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	
+	VariableCondition*		_VariableCondition_New( 
+						SizeT						_sizeOfSelf, 
+						Type						type,
+						Stg_Class_DeleteFunction*				_delete,
+						Stg_Class_PrintFunction*				_print,
+						Stg_Class_CopyFunction*				_copy, 
+						Stg_Component_DefaultConstructorFunction*	_defaultConstructor,
+						Stg_Component_ConstructFunction*		_construct,
+						Stg_Component_BuildFunction*			_build,
+						Stg_Component_InitialiseFunction*			_initialise,
+						Stg_Component_ExecuteFunction*			_execute,
+						Stg_Component_DestroyFunction*		_destroy,
+						Name							name,
+						Bool							initFlag,
+						VariableCondition_BuildSelfFunc*		_buildSelf, 
+						VariableCondition_PrintConciseFunc*		_printConcise,
+						VariableCondition_ReadDictionaryFunc*		_readDictionary,
+						VariableCondition_GetSetFunc*			_getSet,
+						VariableCondition_GetVariableCountFunc		_getVariableCount,
+						VariableCondition_GetVariableIndexFunc*		_getVariableIndex,
+						VariableCondition_GetValueIndexFunc*		_getValueIndex,
+						VariableCondition_GetValueCountFunc*		_getValueCount,
+						VariableCondition_GetValueFunc*			_getValue,
+						Variable_Register*				variable_Register,
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	void				_VariableCondition_Init(
+						void*						variableCondition, 
+						Variable_Register*				variable_Register, 
+						ConditionFunction_Register*			conFunc_Register,
+						Dictionary*					dictionary );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void				_VariableCondition_Delete( void* variableCondition );
+	
+	void				_VariableCondition_Print( void* variableCondition );
+	
+	/* Copy */
+	#define VariableCondition_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define VariableCondition_Copy( self ) \
+		(VariableCondition*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	
+	void* _VariableCondition_Copy( void* variableCondition, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	void				_VariableCondition_Construct( void* variableCondition, Stg_ComponentFactory* cf, void* d );
+	void				_VariableCondition_Build( void* variableCondition, void* data );
+	void				_VariableCondition_Initialise( void* variableCondition, void* data );
+	void				_VariableCondition_Execute( void* variableCondition, void* data );
+	void				_VariableCondition_Destroy( void* variableCondition, void* data );
+	
+	#define VariableCondition_BuildSelf( self, data ) \
+		if( (self)->_buildSelf ) \
+			(self)->_buildSelf( self, data )
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Functions
+	*/
+	
+	void				VariableCondition_Apply( void* variableCondition, void* context );
+	
+	void				VariableCondition_ApplyToVariable(
+						void*				variableCondition,
+						VariableCondition_VariableIndex	varIndex, 
+						void*				context );
+	
+	void				VariableCondition_ApplyToIndex( void* variableCondition, Index globalIndex, void* context );
+	
+	void				VariableCondition_ApplyToIndexVariable(
+						void*				variableCondition, 
+						Index				globalIndex, 
+						VariableCondition_VariableIndex	varIndex,
+						void*				context );
+	
+	/** Checks whether a given (node)/(var at that node) pair is a variable condition */
+	Bool				VariableCondition_IsCondition(
+						void*		variableCondition,
+						Index		globalIndex, 
+						Variable_Index	varIndex );
+	
+	VariableCondition_ValueIndex	VariableCondition_GetValueIndex(
+						void*		variableCondition, 
+						Index		globalIndex, 
+						Variable_Index	varIndex );
+	
+	void				VariableCondition_PrintConcise( void* variableCondition, Stream* stream );
+	
+#endif /* __Base_Automation_VariableCondition_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.meta
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.meta	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition.meta	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+<param name="Name">VariableCondition</param>
+<param name="Organisation">VPAC</param>
+<param name="Project">StGermain</param>
+<param name="Location">./StGermain/Base/Automation/src/</param>
+<param name="Project Web">https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome</param>
+<param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param>
+<param name="License">The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param>
+<param name="Parent">Stg_Component</param>
+<param name="Description">...</param>
+
+<!--Now the interesting stuff-->
+
+
+<list name="Params">
+
+</list>
+
+<list name="Dependencies">
+
+</list>
+<!-- Add an exmaple XML if possible -->
+<param name="Example">...</param>
+
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,225 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: VariableCondition_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "VariableCondition_Register.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Textual name of this class */
+const Type VariableCondition_Register_Type = "VariableCondition_Register";
+
+
+/* Global, default instantiation of the register... will be loaded with in built types (built in Init.c) */
+VariableCondition_Register* variableCondition_Register = 0;
+
+
+VariableCondition_Register* VariableCondition_Register_New(void) {
+	return _VariableCondition_Register_New( sizeof(VariableCondition_Register), VariableCondition_Register_Type, _VariableCondition_Register_Delete, _VariableCondition_Register_Print, NULL );
+}
+
+void VariableCondition_Register_Init( void* variableCondition_Register ) {
+	VariableCondition_Register* self = (VariableCondition_Register*)variableCondition_Register;
+	
+	/* General info */
+	self->type = VariableCondition_Register_Type;
+	self->_sizeOfSelf = sizeof(VariableCondition_Register);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _VariableCondition_Register_Delete;
+	self->_print = _VariableCondition_Register_Print;
+	self->_copy = NULL;
+	_Stg_Class_Init( (Stg_Class*)self );
+	
+	/* VariableCondition_Register info */
+	_VariableCondition_Register_Init( self );
+}
+
+VariableCondition_Register* _VariableCondition_Register_New(
+		SizeT				_sizeOfSelf,
+		Type				type,
+		Stg_Class_DeleteFunction*		_delete,
+		Stg_Class_PrintFunction*		_print,
+		Stg_Class_CopyFunction*		_copy )
+{
+	VariableCondition_Register* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(VariableCondition_Register) );
+	self = (VariableCondition_Register*)_Stg_Class_New( _sizeOfSelf, type, _delete, _print, _copy );
+	
+	/* General info */
+	
+	/* Virtual info */
+	
+	_VariableCondition_Register_Init( self );
+	
+	return self;
+}
+
+void _VariableCondition_Register_Init( void* variableCondition_Register ) {
+	VariableCondition_Register* self = (VariableCondition_Register*)variableCondition_Register;
+	
+	/* General and Virtual info should already be set */
+	
+	/* VariableCondition_Register info */
+	self->count = 0;
+	self->_size = 8;
+	self->_delta = 8;
+	self->entry = Memory_Alloc_Array( VariableCondition_Register_Entry, self->_size, "VC_Register->entry" );
+	memset( self->entry, 0, sizeof(VariableCondition_Register_Entry) * self->_size );
+}
+
+void _VariableCondition_Register_Delete( void* variableCondition_Register ) {
+	VariableCondition_Register* self = (VariableCondition_Register*)variableCondition_Register;
+	
+	/* Assumes ownerships of the element types */
+	if( self->entry ) {
+		Memory_Free( self->entry );
+	}
+	
+	/* Stg_Class_Delete parent */
+	_Stg_Class_Delete( self );
+}
+
+void _VariableCondition_Register_Print( void* variableCondition_Register, Stream* stream ) {
+	VariableCondition_Register* self = (VariableCondition_Register*)variableCondition_Register;
+	#ifdef DEBUG
+		VariableCondition_Index variableCondition_I;
+	#endif
+	
+	/* Set the Journal for printing informations */
+	Stream* variableCondition_RegisterStream = stream;
+	
+	/* General info */
+	Journal_Printf( variableCondition_RegisterStream, "VariableCondition_Register (ptr): %p\n", self );
+	
+	/* Print parent */
+	_Stg_Class_Print( self, variableCondition_RegisterStream );
+	
+	/* Virtual info */
+	
+	/* VariableCondition_Register info */
+	Journal_Printf( variableCondition_RegisterStream, "\tcount: %u\n", self->count );
+	Journal_Printf( variableCondition_RegisterStream, "\t_size: %lu\n", self->_size );
+	Journal_Printf( variableCondition_RegisterStream, "\t_delta: %lu\n", self->_delta );
+	
+	Journal_Printf( variableCondition_RegisterStream, "\tvariableCondition (ptr): %p\n", self->entry );
+	Journal_Printf( variableCondition_RegisterStream, "\tvariableCondition[0-%u]:\n", self->count );
+	#ifdef DEBUG
+		for( variableCondition_I = 0; variableCondition_I < self->count; variableCondition_I++ ) {
+			Journal_Printf( variableCondition_RegisterStream, "\tentry[%u]:\n", variableCondition_I );
+			Journal_Printf( variableCondition_RegisterStream, "\t\ttype: %s\n", self->entry[variableCondition_I].type );
+			Journal_Printf( variableCondition_RegisterStream, "\t\tfactory (func ptr): %p\n", self->entry[variableCondition_I].factory );
+		}
+	#else
+		Journal_Printf( variableCondition_RegisterStream, "...\n" );
+	#endif
+	Journal_Printf( variableCondition_RegisterStream, "\t]\n" );
+}
+
+VariableCondition_Index VariableCondition_Register_Add(
+		void*					variableCondition_Register, 
+		Type					type, 
+		VariableCondition_Register_FactoryFunc*	factory )
+{
+	VariableCondition_Register*	self = (VariableCondition_Register*)variableCondition_Register;
+	VariableCondition_Index	handle;
+	
+	if( self->count >= self->_size ) {
+		SizeT currentSize = self->_size;
+
+		self->_size += self->_delta;
+		self->entry = Memory_Realloc_Array( self->entry, VariableCondition_Register_Entry, self->_size );
+		memset( (Pointer)((ArithPointer)self->entry + (currentSize * sizeof(VariableCondition_Register_Entry)) ),
+			0, sizeof(VariableCondition_Register_Entry) * (self->_size - currentSize) );
+	}
+	
+	handle = self->count;
+	self->entry[handle].type = type;
+	self->entry[handle].factory = factory;
+	self->count++;
+	
+	return handle;
+}
+
+VariableCondition_Index VariableCondition_Register_GetIndex( void* variableCondition_Register, Type type ) {
+	VariableCondition_Register*	self = (VariableCondition_Register*)variableCondition_Register;
+	VariableCondition_Index variableCondition_I;
+	
+	for( variableCondition_I = 0; variableCondition_I < self->count; variableCondition_I++ ) {
+		if( self->entry[variableCondition_I].type == type ) {
+			return variableCondition_I;
+		}
+	}
+	/* type is likely to be given from input file in this case... treat comparison checks like for Name... do strcmp too */
+	for( variableCondition_I = 0; variableCondition_I < self->count; variableCondition_I++ ) {
+		if( strcmp( self->entry[variableCondition_I].type, type ) == 0 ) {
+			return variableCondition_I;
+		}
+	}
+	return (unsigned)-1;
+}
+
+VariableCondition_Register_Entry* _VariableCondition_Register_At( 
+		void*					variableCondition_Register, 
+		VariableCondition_Index			handle ) 
+{
+	VariableCondition_Register*	self = (VariableCondition_Register*)variableCondition_Register;
+	
+	return VariableCondition_Register_At( self, handle );
+}
+
+VariableCondition* VariableCondition_Register_CreateNew(
+				void* variableCondition_Register, 
+				void* variable_Register, 
+				void* conFunc_Register, 
+				Type type, 
+				void* dictionary, 
+				void* data )
+{
+	VariableCondition_Register*	self = (VariableCondition_Register*)variableCondition_Register;
+	
+	return VariableCondition_Register_At( self, VariableCondition_Register_GetIndex( self, type ) )->factory( 
+		(Variable_Register*)variable_Register,
+		(ConditionFunction_Register*)conFunc_Register,
+		(Dictionary*)dictionary,
+		data );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableCondition_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,129 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**
+** Assumptions:
+**
+** Comments:
+**	The original sizes need to be manually set by the user.... this whole system needs rethinking... it can be done better
+**
+** $Id: VariableCondition_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_VariableCondition_Register_h__
+#define __Base_Automation_VariableCondition_Register_h__
+	
+
+	/* Child classes must define these factories */
+	typedef VariableCondition*	(VariableCondition_Register_FactoryFunc)	( Variable_Register* variable_Register, ConditionFunction_Register* conFunc_Register, Dictionary* dictionary, void* data );
+	
+	
+	/** Textual name of this class */
+	extern const Type VariableCondition_Register_Type;
+	
+	
+	/** Global, default instantiation of the register... will be loaded with in built types (built in Init.c) */
+	extern VariableCondition_Register* variableCondition_Register;
+	
+	
+	/* Register entry info */
+	#define __VariableCondition_Register_Entry \
+		Type					type; \
+		VariableCondition_Register_FactoryFunc*	factory;
+	struct _VariableCondition_Register_Entry { __VariableCondition_Register_Entry };
+	
+	
+	/* VariableCondition_Register info */
+	#define __VariableCondition_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* VariableCondition_Register info */ \
+		VariableCondition_Index			count; \
+		SizeT					_size; \
+		SizeT					_delta; \
+		VariableCondition_Register_Entry*	entry;
+	struct _VariableCondition_Register { __VariableCondition_Register };
+	
+	
+	/* Create a new VariableCondition_Register */
+	VariableCondition_Register* VariableCondition_Register_New(void);
+	
+	/* Initialise a VariableCondition_Register */
+	void VariableCondition_Register_Init(
+			void*				variableCondition_Register);
+	
+	/* Creation implementation / Virtual constructor */
+	VariableCondition_Register* _VariableCondition_Register_New( 
+		SizeT					_sizeOfSelf,
+		Type					type,
+		Stg_Class_DeleteFunction*			_delete,
+		Stg_Class_PrintFunction*			_print, 
+		Stg_Class_CopyFunction*			_copy );
+	
+	/* Initialisation implementation */
+	void _VariableCondition_Register_Init( void* variableCondition_Register);
+	
+	
+	/* Stg_Class_Delete implementation */
+	void _VariableCondition_Register_Delete( void* variableCondition_Register );
+	
+	/* Print implementation */
+	void _VariableCondition_Register_Print( void* variableCondition_Register, Stream* stream );
+	
+	
+	/* Add a new entry */
+	VariableCondition_Index VariableCondition_Register_Add( 
+		void*					variableCondition_Register, 
+		Type					type, 
+		VariableCondition_Register_FactoryFunc*	factory );
+	
+	/* Get the handle to an entry */
+	VariableCondition_Index VariableCondition_Register_GetIndex( void* variableCondition_Register, Type type );
+	
+	/* Get an entry from the register */
+	#define VariableCondition_Register_At( variableCondition_Register, handle ) \
+		( &(variableCondition_Register)->entry[(handle)] )
+	VariableCondition_Register_Entry* _VariableCondition_Register_At( 
+		void*					variableCondition_Register, 
+		VariableCondition_Index			handle );
+	
+	/* Create a new instance of a type */
+	VariableCondition* VariableCondition_Register_CreateNew(
+				void* variableCondition_Register, 
+				void* variable_Register, 
+				void* conFunc_Register, 
+				Type type, 
+				void* dictionary, 
+				void* data );
+	
+#endif /* __Base_Automation_VariableCondition_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,201 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: VariableDumpStream.c 789 2004-02-10 17:15:11Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+                                                                                                                                    
+#include "types.h"
+#include "Stg_Component.h"
+#include "Variable.h"
+#include "VariableDumpStream.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+
+const Type VariableDumpStream_Type = "VariableDumpStream";
+
+
+Stream* VariableDumpStream_New( Name name )
+{
+	return (Stream*)_VariableDumpStream_New( 
+		sizeof(VariableDumpStream), 
+		VariableDumpStream_Type, 
+		_VariableDumpStream_Delete, 
+		_VariableDumpStream_Print, 
+		_VariableDumpStream_Copy, 
+		name,
+		_CStream_Printf,
+		_CStream_Write,
+		_VariableDumpStream_Dump,
+		_CStream_SetFile );
+}
+
+void VariableDumpStream_Init( VariableDumpStream* self, Name name )
+{
+	
+}
+
+
+VariableDumpStream* _VariableDumpStream_New( 
+	SizeT			_sizeOfSelf, 
+	Type			type, 
+	Stg_Class_DeleteFunction*	_delete, 
+	Stg_Class_PrintFunction* 	_print,
+	Stg_Class_CopyFunction*	_copy, 
+	Name			name,
+	Stream_PrintfFunction*	_printf, 
+	Stream_WriteFunction*	_write, 
+	Stream_DumpFunction*	_dump,
+	Stream_SetFileFunction*	_setFile )
+{
+	VariableDumpStream* self;
+	
+	/* Allocate memory */
+	assert( _sizeOfSelf >= sizeof(VariableDumpStream) );
+	self = (VariableDumpStream*)_CStream_New( _sizeOfSelf, type, _delete, _print, _copy, name, 
+		_printf, _write, _dump, _setFile );
+	
+	_VariableDumpStream_Init( self );
+	
+	return self;
+}
+
+void _VariableDumpStream_Init( VariableDumpStream* self )
+{
+	self->data = NULL;
+	self->numItems = 0;
+}
+	
+void _VariableDumpStream_Delete( void* cStream )
+{
+	VariableDumpStream* self = (VariableDumpStream*)cStream;
+	
+	/* Stg_Class_Delete parent */
+	_Stream_Delete( self );
+}
+
+void _VariableDumpStream_Print( void* cStream, Stream* stream ) {
+
+	VariableDumpStream* self = (VariableDumpStream*)cStream;
+	
+	/* Print parent */
+	_Stream_Print( self, stream );
+	
+	/* General info */
+	Journal_Printf( stream,  "VariableDumpStream (ptr): %p\n", cStream);
+	
+	Journal_Printf( stream, "data (ptr): %p\n", self->data );
+	Journal_Printf( stream, "numItems: %d\n", self->numItems );
+}
+
+void* _VariableDumpStream_Copy( void* variableDumpStream, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap ) {
+	VariableDumpStream*	self = (VariableDumpStream*)variableDumpStream;
+	VariableDumpStream*	newVariableDumpStream;
+	
+	newVariableDumpStream = _Stream_Copy( self, dest, deep, nameExt, ptrMap );
+	
+	/* HACK */
+	/* TODO: this should actually copy the data, i think... */
+	newVariableDumpStream->data = NULL;
+	newVariableDumpStream->numItems = 0;
+	/* END HACK */
+	newVariableDumpStream->dumpEvery = self->dumpEvery;
+	
+	return newVariableDumpStream;
+}
+
+Bool _VariableDumpStream_Dump( Stream* stream, void* _loop )
+{
+	VariableDumpStream* self = (VariableDumpStream*)stream;
+	int varI, typeI;
+	int* loop = (int*)_loop;
+	float tmp;
+	
+	
+	if ( self->data == NULL || self->numItems == 0 )
+	{
+		return True;
+	}
+	if ( loop != NULL )
+	{
+		if( !((*loop) == 0 || (((*loop) - 1) % self->dumpEvery == 0)) )
+			return True;
+	}
+
+	/* testing if the others compile....
+	char tmp1 = Variable_GetValueAsChar( self->data, varI );
+	short tmp2 = Variable_GetValueAsShort( self->data, varI );
+	int tmp3 = Variable_GetValueAsInt( self->data, varI );
+	double tmp4 = Variable_GetValueAsDouble( self->data, varI );
+	void* tmp5 = Variable_GetValueAsPointer( self->data, varI );*/
+	for ( varI = 0; varI < self->data->arraySize; ++varI ) {
+		if ( *self->data->dataTypeCounts > 1 ) {
+			for ( typeI = 0; typeI < *self->data->dataTypeCounts; ++typeI ) {
+				tmp = Variable_GetValueAtDoubleAsFloat( self->data, varI, typeI );
+				self->_write(
+					stream,
+					&tmp,
+					sizeof(float), 1 );
+			}
+		}
+		else {
+			tmp = Variable_GetValueDoubleAsFloat( self->data, varI );
+			self->_write(
+				stream,
+				&tmp,
+				sizeof(float), 1 );
+		}
+	}
+
+
+	return True;
+}
+
+void VariableDumpStream_SetVariable( void* stream, Variable* data, int numItems, unsigned int dumpEvery, char* fileName )
+{
+	VariableDumpStream* self = (VariableDumpStream*)stream;
+	JournalFile* file;
+	
+	self->data = data;
+	self->numItems = numItems;
+	self->dumpEvery = dumpEvery;
+	
+	file = Journal_GetFile( fileName );
+	if ( file == NULL )
+	{
+		file = CFile_New2( fileName );
+		Journal_RegisterFile( file );
+	}
+	Stream_SetFile( stream, file );
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/VariableDumpStream.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,109 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+/** \file
+** <b>Role:</b>
+**
+**
+** <b>Assumptions</b>
+**	None
+**
+** <b>Comments</b>
+**	None
+**
+** <b>Description</b>
+**
+**
+** Comments:
+**
+** $Id: VariableDumpStream.h 789 2004-02-10 17:15:11Z SteveQuenette $
+**
+**/
+
+#ifndef __Base_IO_VariableDumpStream_h__
+#define __Base_IO_VariableDumpStream_h__
+	
+	/** Textual name for VariableDumpStream class. */
+	extern const Type VariableDumpStream_Type;
+	
+	
+	/** \def __VariableDumpStream See VariableDumpStream. */
+	#define __VariableDumpStream \
+		/* General info */ \
+		__CStream \
+		Variable*	data; \
+		Index		numItems; \
+		unsigned int	dumpEvery;
+	struct VariableDumpStream { __VariableDumpStream };
+
+
+	/** Create a new VariableDumpStream */
+	Stream* VariableDumpStream_New( Name name );
+
+	/** Inits a VariableDumpStream. */
+	void VariableDumpStream_Init( VariableDumpStream* self, Name name );
+
+	/** Constructor interface. */
+	VariableDumpStream* _VariableDumpStream_New( 
+		SizeT			_sizeOfSelf, 
+		Type			type, 
+		Stg_Class_DeleteFunction*	_delete, 
+		Stg_Class_PrintFunction* 	_print,
+		Stg_Class_CopyFunction*	_copy, 
+		Name			name,
+		Stream_PrintfFunction*	_printf, 
+		Stream_WriteFunction*	_write, 
+		Stream_DumpFunction*	_dump,
+		Stream_SetFileFunction*	_setFile );
+
+	/** Init interface. */
+	void _VariableDumpStream_Init( VariableDumpStream *self );
+	
+	/** Stg_Class_Delete interface. */
+	void _VariableDumpStream_Delete( void* vStream );
+	
+	/** Print interface. */
+	void _VariableDumpStream_Print( void* vStream, Stream* stream );
+
+	/** Dumps the variable. */ 
+	Bool _VariableDumpStream_Dump( Stream* stream, void* loop );
+	
+	/** Copy interface. */
+	#define VariableDumpStream_Copy( self ) \
+		(VariableDumpStream*)Stg_Class_Copy( self, NULL, False, NULL, NULL )
+	#define VariableDumpStream_DeepCopy( self ) \
+		(VariableDumpStream*)Stg_Class_Copy( self, NULL, True, NULL, NULL )
+	
+	void* _VariableDumpStream_Copy( void* variableDumpStream, void* dest, Bool deep, Name nameExt, struct PtrMap* ptrMap );
+
+	/** Sets the information that this stream dumps. */
+	void VariableDumpStream_SetVariable( void* stream, Variable* data, int numItems, unsigned int dumpEvery, char* fileName );
+	
+	
+#endif /* __IO_VariableDumpStreamFile_h__ */
+
+
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,268 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: Variable_Register.c 3879 2006-10-26 01:32:33Z KathleenHumble $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <stdarg.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+
+#include "types.h"
+#include "shortcuts.h"
+#include "Stg_Component.h"
+#include "Variable.h"
+#include "Variable_Register.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+const Type Variable_Register_Type = "Variable_Register";
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Constructor
+*/
+
+Variable_Register* Variable_Register_New(void)
+{ 
+	return _Variable_Register_New( sizeof(Variable_Register), Variable_Register_Type, _Variable_Register_Delete,
+		_Variable_Register_Print, _Variable_Register_Copy );
+}
+
+
+void Variable_Register_Init(Variable_Register* self)
+{ 
+	/* General info */
+	self->type = Variable_Register_Type;
+	self->_sizeOfSelf = sizeof(Variable_Register);
+	self->_deleteSelf = False;
+	
+	/* Virtual info */
+	self->_delete = _Variable_Register_Delete;
+	self->_print = _Variable_Register_Print;
+	self->_copy = _Variable_Register_Copy;
+	
+	_Stg_Class_Init((Stg_Class*)self);
+	
+	/* Stg_Class info */
+	_Variable_Register_Init(self);
+}
+
+
+Variable_Register* _Variable_Register_New( 
+			SizeT			_sizeOfSelf,
+			Type			type,
+			Stg_Class_DeleteFunction*	_delete,
+			Stg_Class_PrintFunction*	_print, 
+			Stg_Class_CopyFunction*	_copy )
+{
+	Variable_Register*	self;
+	
+	/* Allocate memory */
+	self = (Variable_Register*)_Stg_Class_New(_sizeOfSelf, type, _delete, _print, _copy);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	_Variable_Register_Init(self);
+	
+	return self;
+}
+
+
+void _Variable_Register_Init(void* variable_Register)
+{ 
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	
+	self->count = 0;
+	self->_size = 8;
+	self->_delta = 8;
+	self->_variable = Memory_Alloc_Array( Variable*, self->_size, "Variable_Register->_variable" );
+	memset(self->_variable, 0, sizeof(Variable*)*self->_size);
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** General virtual functions
+*/
+
+void _Variable_Register_Delete(void* variable_Register)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	
+	if (self->_variable) Memory_Free(self->_variable);
+
+	/* Stg_Class_Delete parent class */
+	_Stg_Class_Delete(self);
+}
+
+void _Variable_Register_Print(void* variable_Register, Stream* stream)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	
+	/* Set the Journal for printing informations */
+	Stream* variable_RegisterStream = Journal_Register( InfoStream_Type,	"Variable_RegisterStream");
+	
+	/* General info */
+	Journal_Printf( variable_RegisterStream, "Variable_Register (ptr): %p\n", self);
+	
+	/* Virtual info */
+	
+	/* Stg_Class info */
+	Journal_Printf( variable_RegisterStream, "\tcount: %u\n", self->count);
+	Journal_Printf( variable_RegisterStream, "\t_size: %lu\n", self->_size);
+	Journal_Printf( variable_RegisterStream, "\t_delta: %lu\n", self->_delta);
+	Journal_Printf( variable_RegisterStream, "\t_variable (ptr): %p\n", self->_variable);
+	if (self->_variable)
+	{
+		Variable_Index	var_I;
+		
+		for (var_I = 0; var_I < self->count; var_I++)
+			Print(self->_variable[var_I], stream);
+	}
+	
+	/* Print parent */
+	_Stg_Class_Print(self, variable_RegisterStream);
+}
+
+void* _Variable_Register_Copy( void* vr, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+
+	Variable_Register* self = (Variable_Register*)vr;
+	Variable_Register* newVariableRegister;
+	int ii;
+
+	newVariableRegister = (Variable_Register*)_Stg_Class_Copy( self, dest, deep, nameExt, ptrMap );
+	PtrMap_Append( ptrMap, self, newVariableRegister );
+
+	newVariableRegister->count = self->count;
+	newVariableRegister->_size = self->_size;
+	newVariableRegister->_variable = Memory_Alloc_Array( Variable*, self->_size, "Variable_Register->_variable" );
+	memset(newVariableRegister->_variable, 0, sizeof(Variable*)*self->_size);
+
+	for ( ii = 0; ii < self->count; ++ii ) {
+		if ( (newVariableRegister->_variable[ii] = PtrMap_Find( ptrMap, self->_variable[ii] )) == NULL ) {
+			newVariableRegister->_variable[ii] = Stg_Class_Copy( self->_variable[ii], NULL, deep, nameExt, ptrMap );
+		}
+	}
+
+	return newVariableRegister;
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Macros
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Virtual functions
+*/
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Build functions
+*/
+
+Variable_Index Variable_Register_Add(void* variable_Register, Variable* variable)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	Variable_Index		handle;
+	
+	if (self->count >= self->_size)
+	{
+		SizeT currentSize = self->_size;
+
+		self->_size += self->_delta;
+		self->_variable = Memory_Realloc_Array( self->_variable, Variable*, self->_size );
+		memset( (Pointer)((ArithPointer)self->_variable + (currentSize * sizeof(Variable*)) ), 0, 
+			sizeof(Variable*) * (self->_size - currentSize) );
+	}
+	
+	handle = self->count++;
+	self->_variable[handle] = variable;
+
+	return handle;
+}
+
+
+void Variable_Register_BuildAll(void* variable_Register)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	Variable_Index		var_I;
+	
+	for (var_I = 0; var_I < self->count; var_I++)
+		Build( self->_variable[var_I], 0, False );
+}
+
+
+/*--------------------------------------------------------------------------------------------------------------------------
+** Functions
+*/
+
+Variable_Index Variable_Register_GetIndex(void* variable_Register, Name name)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	Variable_Index		var_I;
+	
+	for (var_I = 0; var_I < self->count; var_I++)
+	{
+		if (self->_variable[var_I]->name && !strcmp(name, self->_variable[var_I]->name))
+			return var_I;
+	}
+	
+	return (Variable_Index)-1;
+}
+
+
+Variable* Variable_Register_GetByName(void* variable_Register, Name name)
+{
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	Variable_Index		varIndex;
+	
+	if( (varIndex = Variable_Register_GetIndex( self, name )) != (Variable_Index)-1 )
+		return self->_variable[varIndex];
+	
+	return NULL;
+}
+
+
+Variable* Variable_Register_GetByIndex(void* variable_Register, Variable_Index varIndex ) {
+	Variable_Register*	self = (Variable_Register*)variable_Register;
+	#if DEBUG
+	Stream*			error = Journal_Register( ErrorStream_Type, self->type );
+	
+	Journal_DFirewall(  (varIndex < self->count), error,
+		"Error: Given variable index %d not between 0 and variable count %d.\n",
+		varIndex, self->count );
+	#endif
+		
+	return  self->_variable[varIndex];
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/Variable_Register.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,125 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Instantiates the Variable_Register such that there is only one set of DOF descriptions (for example, all the nodes have the same
+**	DOF configuration).
+**
+** Assumptions:
+**	All "adding" is done before the Variable_Register_Build(...), which will be done in the mesh's initialisation.
+**
+** Comments:
+**	You "add" DOF descriptors by using the Variable_Register_Add( variable_Register, name, offset ), where the "name" is the
+**	textual name for the DOF that will be used in the I/O of the DOF (e.g. for initial and boundary conditions), and "offset" is
+**	the memory offset of the DOF in the construct that it will be used (e.g. node.vel[0]-node ).
+**
+** $Id: Variable_Register.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_Variable_Register_h__
+#define __Base_Automation_Variable_Register_h__
+	
+	
+	extern const Type Variable_Register_Type;
+	
+	
+	#define __Variable_Register \
+		/* General info */ \
+		__Stg_Class \
+		\
+		/* Virtual info */ \
+		\
+		/* Stg_Class info */ \
+		/** Total number of variables counted */ \
+		Variable_Index				count; \
+		SizeT					_size; \
+		SizeT					_delta; \
+		Variable**				_variable; \
+		
+	struct _Variable_Register { __Variable_Register };
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Constructor
+	*/
+	Variable_Register*	Variable_Register_New(void);
+	
+	void			Variable_Register_Init(Variable_Register* self);
+	
+	Variable_Register*	_Variable_Register_New( 
+					SizeT			_sizeOfSelf,
+					Type			type,
+					Stg_Class_DeleteFunction*	_delete,
+					Stg_Class_PrintFunction*	_print, 
+					Stg_Class_CopyFunction*	_copy );
+		
+	void			_Variable_Register_Init(void* variable_Register);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** General virtual functions
+	*/
+	
+	void	_Variable_Register_Delete(void* variable_Register);
+	
+	void	_Variable_Register_Print(void* variable_Register, Stream* stream);
+
+	void*	_Variable_Register_Copy( void* vr, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Macros
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Virtual functions
+	*/
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Build functions
+	*/
+	
+	/* Add a variable... do before building */
+	Variable_Index	Variable_Register_Add(void* variable_Register, Variable* variable);
+	
+	void		Variable_Register_BuildAll(void* variable_Register);
+	
+	
+	/*--------------------------------------------------------------------------------------------------------------------------
+	** Public Functions & Macros
+	*/
+	
+	Variable_Index	Variable_Register_GetIndex(void* variable_Register, Name name);
+
+	Variable*	Variable_Register_GetByName(void* variable_Register, Name name);
+
+	Variable*	Variable_Register_GetByIndex( void* variable_Register, Variable_Index varIndex);	
+	
+#endif /* __Base_Automation_Variable_Register_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,50 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.rules 1735 2004-07-26 00:19:55Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+lib = ${def_lib}
+libstatic = yes
+libdynamic = yes
+includes = ${def_inc}
+
+SRCS = ${def_srcs}
+
+HDRS = ${def_hdrs}
+
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain -I${MPI_INCDIR} ${XML_CFLAGS}
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseContainer ${RPATH_LFLAGS}
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+include ${PROJ_ROOT}/Makefile.vmake

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/offsets.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/offsets.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/offsets.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,72 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Macros for calculating offsets of members in structs and arrays.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: offsets.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_offsets_h__
+#define __Base_Automation_offsets_h__
+
+	/** Given a struct object and the name of a member, return the member */
+	#define GetMember( structVar, member ) \
+		( (structVar).member )
+
+	/** Given an array object and an index into the array, return the indexed item */
+	#define GetIndex( arrayVar, index ) \
+		( (arrayVar)[(index)] )
+
+	/** Given a struct object and the name of a member, work out the offset of that member in the struct. */
+	#define GetOffsetOfMember( structVar, member ) \
+		( (ArithPointer)&( GetMember( (structVar), member ) ) - (ArithPointer)&(structVar) )
+
+	/** Given an array object and an index into the array, work out the offset of that index in the array */
+	#define GetOffsetOfIndex( arrayVar, index ) \
+		( (ArithPointer)&( GetIndex( (arrayVar), (index) ) ) - (ArithPointer)&(arrayVar) )
+
+	/** Given a struct object, the name of an array member and an index into the array, work out the offset of that index in
+	    the struct */
+	#define GetOffsetOfMemberArrayIndex( structVar, arrayMember, index ) \
+		( GetOffsetOfMember( (structVar), arrayMember ) + GetOffsetOfIndex( (structVar).arrayMember, (index) ) )
+
+	/** Given an array object, the index of a struct item and a name of a member, work out the offset of that member in the
+	    array */
+	#define GetOffsetOfIndexStructMember( arrayVar, structIndex, member ) \
+		( GetOffsetOfIndex( (arrayVar), (structIndex) ) + \
+		  GetOffsetOfMember( GetIndex( (arrayVar), (structIndex) ), (index) ) )
+
+#endif /* __Base_Automation_offsets_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/shortcuts.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/shortcuts.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/shortcuts.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,53 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Shortcuts to complex types in the eyes of the Base user.
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: shortcuts.h 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_shortcuts_h__
+#define __Base_Automation_shortcuts_h__
+	
+	/* VTK uses Stg_Class_Delete as a standard class member...so if an app
+	uses St. G and VTK, then we can't use this macro */
+	#ifndef __vtkObject_h
+		#define Build			Stg_Component_Build
+		#define Initialise		Stg_Component_Initialise
+		#define Execute			Stg_Component_Execute
+	#endif
+	
+#endif /* __Base_Automation_shortcuts_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/src/types.h
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/src/types.h	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/src/types.h	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,111 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+*/
+/** \file
+**  Role:
+**	Types for the Automation layer
+**
+** Assumptions:
+**	None as yet.
+**
+** Comments:
+**	None as yet.
+**
+** $Id: types.h 3614 2006-06-01 08:58:48Z SteveQuenette $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Base_Automation_types_h__
+#define __Base_Automation_types_h__
+
+	/* types/classes */
+	typedef struct Stg_Component			Stg_Component;
+	typedef struct Stg_ComponentMeta                Stg_ComponentMeta;
+	typedef struct Stg_ComponentMeta_Value          Stg_ComponentMeta_Value;
+	typedef struct Stg_ComponentRegisterElement     Stg_ComponentRegisterElement;
+	typedef struct Stg_ComponentRegister            Stg_ComponentRegister;
+	typedef struct LiveComponentRegister            LiveComponentRegister;
+	typedef struct Stg_ComponentFactory		Stg_ComponentFactory;
+	typedef struct DocumentationComponentFactory    DocumentationComponentFactory;
+	typedef struct HierarchyTable                   HierarchyTable;
+	typedef struct Stg_CallGraph			Stg_CallGraph;
+	typedef struct _Variable			Variable;
+	typedef struct _Variable_Register		Variable_Register;
+	typedef struct VariableDumpStream		VariableDumpStream;
+	typedef struct _VariableCondition		VariableCondition;
+	typedef struct _SetVC				SetVC;
+	typedef struct _CompositeVC			CompositeVC;
+	typedef struct _VariableCondition_Register	VariableCondition_Register;
+	typedef struct _ConditionFunction		ConditionFunction;
+	typedef struct _ConditionFunction_Register	ConditionFunction_Register;
+
+	typedef struct _VariableAllVC_Entry		VariableAllVC_Entry;
+	typedef struct _VariableAllVC			VariableAllVC;
+	typedef Index					VariableAllVC_Entry_Index;
+
+	/* Variable_Register types */
+	typedef Index					Variable_Set_Index;
+	typedef Index					Variable_Index;
+	typedef Index					Dof_Index;
+	
+	/* VariableCondition_Register types */
+	typedef struct _VariableCondition_Register_Entry VariableCondition_Register_Entry;
+	
+	/* VariableCondition types */
+	typedef enum
+	{
+		VC_ValueType_Double = 1,
+		VC_ValueType_Int,
+		VC_ValueType_Short,
+		VC_ValueType_Char,
+		VC_ValueType_Ptr,
+		VC_ValueType_DoubleArray,
+		VC_ValueType_CFIndex
+	} VariableCondition_ValueType;
+	
+	typedef struct SearchCriteria_t{
+		Name type;
+		Name version;	
+	}SearchCriteria;
+
+	typedef Index					VariableCondition_Index;
+	typedef struct _VariableCondition_Value		VariableCondition_Value;
+	typedef struct _VariableCondition_Tuple		VariableCondition_Tuple;
+	typedef Index					VariableCondition_ValueIndex;
+	typedef Index					ConditionFunction_Index;
+	typedef Index					VariableCondition_VariableIndex;
+
+	typedef struct _SetVC_Entry			SetVC_Entry;
+	typedef Index					SetVC_Entry_Index;
+	
+	/* CompositeVC types */
+	typedef Index					CompositeVC_ItemIndex;
+	
+	typedef void* (Stg_Component_Constructor) ( Name );
+	typedef void (Stg_Component_LoadFromDict) ( void*, Dictionary*, Dictionary*, Stg_ObjectList* );
+
+#endif /* __Base_Automation_types_h__ */

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Make.mm
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Make.mm	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Make.mm	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,96 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Make.mm 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+include Makefile.def
+
+PROJECT = StGermain
+
+PROJ_TIDY += $(PROJ_TESTS)
+PROJ_CLEAN = $(PROJ_TIDY)
+TST_DIR = $(BLD_ROOT)/tests/$(TARGET_TAG)
+
+PROJ_LIBRARIES = ${addprefix $(BLD_LIBDIR)/, ${def_libs}}
+LIBS = $(PROJ_LIBRARIES) -lm $(EXTERNAL_LIBS) `xml2-config --libs`
+SH = sh
+PROJ_TESTS = ${addprefix ${TST_DIR}/, ${basename ${def_srcs}}}
+PROJ_CHECKS = ${def_checks}
+PROJ_CC_FLAGS += -I${BLD_INCDIR}/StGermain `xml2-config --cflags` -DCURR_MODULE_NAME=\"${def_tst}\"
+
+PASSTOTALFILE = "${BLD_TMPDIR}/.passtotal"
+FAILTOTALFILE = "${BLD_TMPDIR}/.failtotal"
+
+DUMP_VARS_TO_TMP_FILE = \
+	echo "TST_DIR=${TST_DIR}" > tmp.sh; \
+	echo "MPI_DIR=${MPI_DIR}" >> tmp.sh; \
+	echo "MPI_LIBDIR=${MPI_LIBDIR}" >> tmp.sh; \
+	echo "MPI_INCDIR=${MPI_INCDIR}" >> tmp.sh;
+
+all: $(PROJ_TESTS)
+
+
+check:: test
+
+test:
+	@if test ! -f ${PASSTOTALFILE}; then \
+		echo "0" | cat > ${PASSTOTALFILE}; \
+		echo "0" | cat > ${FAILTOTALFILE}; \
+	fi; \
+	$(DUMP_VARS_TO_TMP_FILE) \
+	list='${PROJ_CHECKS}'; \
+	for i in $$list; do \
+		if test "x$$i" != "x"; then \
+			if ${SH} ./$$i; then \
+				expr `cat ${PASSTOTALFILE}` + 1 > ${PASSTOTALFILE}; \
+			else \
+				expr `cat ${FAILTOTALFILE}` + 1 > ${FAILTOTALFILE}; \
+			fi; \
+		fi; \
+	done; \
+	rm tmp.sh; \
+	if test ${MAKELEVEL} = 0; then \
+		echo "--------------------------------------------"; \
+		echo "Summary of results:"; \
+		echo "Passes = `cat ${PASSTOTALFILE}`"; \
+		echo "Fails = `cat ${FAILTOTALFILE}`"; \
+		rm -f ${PASSTOTALFILE} ${FAILTOTALFILE}; \
+	fi;	
+
+release: tidy
+	cvs release .
+
+update: clean
+	cvs update .
+
+#--------------------------------------------------------------------------
+#
+
+${TST_DIR}/%: %.c ${PROJ_LIBRARIES}
+	@if test ! -d ${TST_DIR}; then mkdir -p ${TST_DIR}; fi
+	${CC} -o $@ $< $(CC_FLAGS) $(PROJ_CC_FLAGS) $(CC_BUILD_DEFINES) $(CC_BUILD_INCLUDES) $(LCFLAGS) $(LIBS)

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Makefile.def	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/Makefile.def	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,78 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: Makefile.def 3614 2006-06-01 08:58:48Z SteveQuenette $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def_tst = libStGermainBaseAutomation
+
+def_srcs = \
+	testComponentCopy.c \
+	testLiveComponentRegister.c \
+	testVariable.c \
+	testVariable-Char.c \
+	testVariable-Short.c \
+	testVariable-Int.c \
+	testVariable-Float.c \
+	testVariable-Double.c \
+	testVariable_Register.c \
+	testVariableDumpStream.c \
+	testVariableValueCompare.c \
+	testVariableCopy.c \
+	testSetVC.c \
+	testConditionFunction.c \
+	testConditionFunction_Register.c \
+	testHierarchyTable.c \
+	testCallGraph.c \
+	testVariableAllVC.c \
+	testComponentMetadata.c
+	
+def_checks = \
+	testComponentCopy.0of1.sh \
+	testLiveComponentRegister.0of1.sh \
+	testVariable.0of1.sh \
+	testVariable-Char.0of1.sh \
+	testVariable-Short.0of1.sh \
+	testVariable-Int.0of1.sh \
+	testVariable-Float.0of1.sh \
+	testVariable-Double.0of1.sh \
+	testVariable_Register.0of1.sh \
+	testVariableDumpStream.0of1.sh \
+	testVariableValueCompare.0of1.sh \
+	testVariableCopy.0of1.sh \
+	testConditionFunction.0of1.sh \
+	testConditionFunction_Register.0of1.sh \
+	testSetVC.0of1.sh \
+	testSetVC.0of2.sh \
+	testSetVC.1of2.sh \
+	testSetVC.0of3.sh \
+	testSetVC.1of3.sh \
+	testSetVC.2of3.sh \
+	testHierarchyTable.0of1.sh \
+	testCallGraph.0of1.sh \
+	testVariableAllVC.0of1.sh \
+	testComponentMetadata.0of1.sh

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/copy.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/copy.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/copy.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	<struct name="components">
+		<struct name="a">
+			<param name="Type">Stg_ComponentA</param>
+		</struct>
+		<struct name="b">
+			<param name="Type">Stg_ComponentB</param>
+		</struct>
+		<struct name="c">
+			<param name="Type">Stg_ComponentC</param>
+		</struct>
+    	</struct>
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/metatest.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/metatest.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/metatest.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	<struct name="components">
+		<struct name="vc">
+			<param name="Type">CompositeVC</param>
+		</struct>
+    	</struct>
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/setVC.xml
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/setVC.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/data/setVC.xml	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+<!-- A StGermain input file -->
+<!-- DTD to validate against -->
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+	<struct name="SetVC">
+		<param name="type">SetVC</param>
+		<param name="indexCount">64</param>
+		<list name="indices">
+			<param>0</param>
+			<param>2</param>
+			<param>4</param>
+			<param>6</param>
+			<param>8</param>
+			<param>10</param>
+			<param>12</param>
+			<param>14</param>
+			<param>16</param>
+			<param>18</param>
+			<param>20</param>
+			<param>22</param>
+			<param>24</param>
+			<param>26</param>
+		</list>
+		<list name="variables">
+			<struct>
+				<param name="name">vx</param>
+				<param name="type">double</param>
+				<param name="value" type="double">2</param>
+			</struct>
+			<struct>
+				<param name="name">vy</param>
+				<param name="type">func</param>
+				<param name="value">quadratic</param>
+			</struct>
+			<struct>
+				<param name="name">vz</param>
+				<param name="type">double</param>
+				<param name="value" type="double">1</param>
+			</struct>
+			<struct>
+				<param name="name">temp</param>
+				<param name="type">array</param>
+				<list name="value">
+					<param type="double">5</param>
+					<param type="double">6</param>
+					<param type="double">7</param>
+					<param type="double">8</param>
+					<param type="double">9</param>
+				</list>
+			</struct>
+		</list>
+	</struct>
+	
+</StGermainData>

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/makefile
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/makefile	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/makefile	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,57 @@
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+##
+## Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+##
+## Authors:
+##	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+##	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+##	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+##	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+##	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+##	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+##
+##  This library is free software; you can redistribute it and/or
+##  modify it under the terms of the GNU Lesser General Public
+##  License as published by the Free Software Foundation; either
+##  version 2.1 of the License, or (at your option) any later version.
+##
+##  This library is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+##  Lesser General Public License for more details.
+##
+##  You should have received a copy of the GNU Lesser General Public
+##  License along with this library; if not, write to the Free Software
+##  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##
+## $Id: makefile 3462 2006-02-19 06:53:24Z WalterLandry $
+##
+##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# obtain defaults for required variables according to system and project location, and then run the build.
+ifndef PROJ_ROOT
+	PROJ_ROOT=../../..
+endif
+include ${PROJ_ROOT}/Makefile.system
+
+include Makefile.def
+
+tests = ${def_tst}
+
+checks = ${def_checks}
+
+SRCS = ${def_srcs}
+
+PROJ_LIBS = ${def_libs}
+EXTERNAL_INCLUDES = -I${INC_DIR}/StGermain
+EXTERNAL_LIBS = -L${LIB_DIR} -lStGermainBaseAutomation -lStGermainBaseContainer -lStGermainBaseIO -lStGermainBaseFoundation ${RPATH_LFLAGS}
+
+packages = MPI XML MATH
+
+ifdef HAVE_SOAP
+	EXTERNAL_LIBS += -lStGermainRegresstor
+	packages += CSOAP NANOHTTP
+endif
+
+include ${PROJ_ROOT}/Makefile.vmake
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,7 @@
+Passed test Construction: Can we use New()?
+Passed test One push: First push?
+Passed test One pop: Pop first push?
+Passed test New entries: Unique for function-parent-name?
+Passed test Table realloc: Does the table grow when needed?
+Passed test Copy: Copying
+Passed test Destruction: Deleting all allocated memory

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT="./VMake/executableTester.sh"
+until test -r "${TEST_SCRIPT}" ; do
+        TEST_SCRIPT="../${TEST_SCRIPT}"
+done
+. "${TEST_SCRIPT}"
+
+runAndHandleSystemTest "testCallGraph " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testCallGraph.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,216 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testNamedStg_ObjectList.c 2432 2005-08-08 23:01:59Z Raquibul Hassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <mpi.h>
+#include <string.h>
+
+
+const Type TestFunc1_Type = "TestFunc1";
+void TestFunc1( void ) {}
+
+const Type TestFunc2_Type = "TestFunc2";
+void TestFunc2( void ) {}
+
+int main( int argc, char *argv[] ) {
+	int			rank;
+	int			procCount;
+	int			procToWatch;
+	Stream*			stream;
+
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Automation/CallGraph" );
+
+	stream = Journal_Register( "info", "myStream" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+
+	if( rank == procToWatch ) {
+		Stg_CallGraph*	cg0;
+		Stg_CallGraph 	cg1;
+		Stg_CallGraph*	cg2;
+		Stg_CallGraph*	cg3;
+		Stg_CallGraph*	cg3deep;
+		Index		count;
+		Index		size;
+		Index		i;
+		
+		
+		/* Test 1: Construction */
+		cg0 = Stg_CallGraph_New();
+		Stg_CallGraph_Init( &cg1 );
+		cg2 = Stg_CallGraph_New();
+		cg3 = Stg_CallGraph_New();
+		RegressionTest_Check( cg0 && cg2 && cg3, stream, "Construction", "Can we use New()?" );
+		
+		
+		/* Test 2: Can we push the first call on the stack? */
+		Stg_CallGraph_Push( cg0, TestFunc1, TestFunc1_Type );
+		Stg_CallGraph_Push( &cg1, TestFunc1, TestFunc1_Type );
+		RegressionTest_Check( 
+			cg0->_stack && 
+			!cg0->_stack->pop && 
+			cg0->_stack->entry_I == 0 && 
+			cg0->_stack->functionPtr == TestFunc1 &&
+			cg0->_tableCount == 1 && 
+			cg0->table[0].name == TestFunc1_Type &&
+			cg0->table[0].functionPtr == TestFunc1 &&
+			cg0->table[0].parentPtr == 0 &&
+			cg0->table[0].returned == 0 &&
+			cg0->table[0].called == 1 &&
+			cg1._stack && 
+			!cg1._stack->pop && 
+			cg1._stack->entry_I == 0 && 
+			cg1._stack->functionPtr == TestFunc1 &&
+			cg1._tableCount == 1 && 
+			cg1.table[0].name == TestFunc1_Type &&
+			cg1.table[0].functionPtr == TestFunc1 &&
+			cg1.table[0].parentPtr == 0 &&
+			cg1.table[0].returned == 0 &&
+			cg1.table[0].called == 1, 
+			stream, "One push", "First push?" );
+		
+		
+		/* Test 3: Can we pop the first call on the stack? */
+		Stg_CallGraph_Pop( cg0 );
+		Stg_CallGraph_Pop( &cg1 );
+		RegressionTest_Check( 
+			!cg0->_stack && 
+			cg0->table[0].name == TestFunc1_Type &&
+			cg0->table[0].functionPtr == TestFunc1 &&
+			cg0->table[0].parentPtr == 0 &&
+			cg0->table[0].returned == 1 &&
+			cg0->table[0].called == 1 &&
+			!cg1._stack && 
+			cg1.table[0].name == TestFunc1_Type &&
+			cg1.table[0].functionPtr == TestFunc1 &&
+			cg1.table[0].parentPtr == 0 &&
+			cg1.table[0].returned == 1 &&
+			cg1.table[0].called == 1, 
+			stream, "One pop", "Pop first push?" );
+		
+		
+		/* Test 4: Ensure that each function pointer - parent pointer - name is a unique entry */
+		Stg_CallGraph_Push( cg2, TestFunc1, TestFunc1_Type ); /* p0: f:1 n:1  Should add */
+		Stg_CallGraph_Push( cg2, TestFunc2, TestFunc2_Type ); /* p1: f:2 n:2  Should add */
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Push( cg2, TestFunc2, TestFunc2_Type ); /* p1: f:2 n:2  Should increment */
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Push( cg2, TestFunc1, TestFunc2_Type ); /* p1: f:1 n:2  Should add (recursive case) */
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Push( cg2, TestFunc2, TestFunc1_Type ); /* p1: f:2 n:1  Should add */
+		Stg_CallGraph_Push( cg2, TestFunc1, TestFunc1_Type ); /* p2: f:1 n:1  Should add */
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Pop( cg2 );
+		Stg_CallGraph_Pop( cg2 );
+		RegressionTest_Check( 
+			!cg2->_stack && 
+			cg2->_tableCount == 5 && 
+			cg2->table[0].returned == 1 &&
+			cg2->table[0].called == 1 &&
+			cg2->table[1].returned == 2 &&
+			cg2->table[1].called == 2 &&
+			cg2->table[2].returned == 1 &&
+			cg2->table[2].called == 1 &&
+			cg2->table[3].returned == 1 &&
+			cg2->table[3].called == 1 &&
+			cg2->table[4].returned == 1 &&
+			cg2->table[4].called == 1,
+			stream, "New entries", "Unique for function-parent-name?" );
+		
+		
+		/* Test 5: Force a realloc of the table */
+		count = (Index)((double)1.5 * cg3->_tableSize);
+		size = cg3->_tableSize;
+		for( i = 0; i < count; i++ ) {
+			/* Use "i" as a unique string (unique pointer value)... don't try to print! */
+			Stg_CallGraph_Push( cg3, TestFunc1, (Name)i );
+		}
+		RegressionTest_Check( 
+			cg3->_tableCount == count && 
+			cg3->_tableSize == (size * 2),
+			stream, "Table realloc", "Does the table grow when needed?" );
+		
+		
+		/* Test 9: Copying */
+		/* Shallow copying not yet implemented */
+		cg3deep = Stg_Class_Copy( cg3, 0, True, 0, 0 );
+		RegressionTest_Check(
+			cg3->_tableCount == cg3deep->_tableCount &&
+			cg3->_tableSize == cg3deep->_tableSize &&
+			/* TODO: check not just the table, but the stack too */
+			memcmp( cg3->table, cg3deep->table, sizeof(_Stg_CallGraph_Entry) * cg3->_tableCount ) == 0,
+			stream,
+			"Copy",
+			"Copying" );
+		
+		/* Test 9: Destruction */
+		Stg_Class_Delete(  cg3deep );
+		Stg_Class_Delete(  cg3 );
+		Stg_Class_Delete(  cg2 );
+		Stg_Class_Delete( &cg1 );
+		Stg_Class_Delete(  cg0 );
+		RegressionTest_Check( 1, stream, "Destruction", "Deleting all allocated memory" );
+	}
+
+	RegressionTest_Finalise();
+
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,74 @@
+
+Creating Stg_Components from the component-list
+
+	Instantiating Stg_ComponentA as a
+	Instantiating Stg_ComponentB as b
+	Instantiating Stg_ComponentC as c
+
+Constructing Stg_Components from the live-component register
+
+	Constructing a..
+		b has not been constructed yet. Constructing now.
+			Constructing b..
+		c has not been constructed yet. Constructing now.
+			Constructing c..
+Passed test Stg_Components creation: Can we create the components from dictionary
+a Stg_ComponentA 1,
+b Stg_ComponentB 3,
+c Stg_ComponentC 2,
+b Stg_ComponentB 3,
+Passed test Stg_Components copy: Can we copy the components and subcomponents correctly
+a_dup Stg_ComponentA 1,
+b_dup Stg_ComponentB 3,
+c_dup Stg_ComponentC 2,
+b_dup Stg_ComponentB 3,
+Passed test Instance counter: Are the instance counters correct
+LiveComponentRegister (ptr): 0x532cd4
+Stg_Class (ptr): 0x532cd4
+	sizeOfSelf: 56
+	_deleteSelf: Yes
+	type: LiveComponentRegister
+	_delete (func ptr): 0x2a9556b3f1
+	_print (func ptr): 0x2a9556b46e
+	_copy (func ptr): (nil)
+componentList (ptr): 0x528324
+Stg_ObjectList (ptr):0x528324
+	Stg_Class (ptr): 0x528324
+		sizeOfSelf: 176
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0x2a958e0928
+		_print (func ptr): 0x2a958e0957
+		_copy (func ptr): 0x2a958e0bd3
+	_append(func ptr): 0x2a958e1859
+	_prepend(func ptr): 0x2a958e1929
+	_replaceAll(func ptr): 0x2a958e19e1
+	_replace(func ptr): 0x2a958e1aaa
+	_insertBefore(func ptr): 0x2a958e1c67
+	_insertAfter(func ptr): 0x2a958e1e1a
+	_remove(func ptr): 0x2a958e1fd1
+	_getIndex(func ptr): 0x2a958e2065
+	_get(func ptr): 0x2a958e2124
+	_allocMoreMemory(func ptr): 0x2a958e2353
+	_insertAtIndex(func ptr): 0x2a958e23e7
+	_removeByIndex(func ptr): 0x2a958e248a
+	_deleteAllObjects(func ptr): 0x2a958e22c5
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 6
+	data[0-6]:
+	a Stg_ComponentA 1,
+	b Stg_ComponentB 3,
+	c Stg_ComponentC 2,
+	b Stg_ComponentB 3,
+	b Stg_ComponentB 3,
+	c Stg_ComponentC 2,
+	b Stg_ComponentB 3,
+	a_dup Stg_ComponentA 1,
+	b_dup Stg_ComponentB 3,
+	c_dup Stg_ComponentC 2,
+	b_dup Stg_ComponentB 3,
+	b_dup Stg_ComponentB 3,
+	c_dup Stg_ComponentC 2,
+	b_dup Stg_ComponentB 3,

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testComponentCopy " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentCopy.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,438 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+** 	Tests Stg_Component copying
+**
+** $Id: testLiveComponentRegister.c 2136 2005-05-10 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+/*
+ * A
+ * |
+ * +------>C
+ * |       |
+ * +-->B<--+
+ */
+
+struct Stg_ComponentA;
+struct Stg_ComponentB;
+struct Stg_ComponentC;
+
+typedef struct Stg_ComponentA Stg_ComponentA;
+typedef struct Stg_ComponentB Stg_ComponentB;
+typedef struct Stg_ComponentC Stg_ComponentC;
+
+Type Stg_ComponentA_Type = "Stg_ComponentA";
+Type Stg_ComponentB_Type = "Stg_ComponentB";
+Type Stg_ComponentC_Type = "Stg_ComponentC";
+
+const char* Stg_ComponentA_Type_GetMetadata() { return  ""; }
+const char* Stg_ComponentB_Type_GetMetadata() { return  ""; }
+const char* Stg_ComponentC_Type_GetMetadata() { return  ""; }
+
+
+#define __Stg_ComponentA \
+	__Stg_Component \
+	Stg_ComponentB* b; \
+	Stg_ComponentC* c;
+struct Stg_ComponentA { __Stg_ComponentA };
+
+void* Stg_ComponentA_NewDefault( Name name );
+void Stg_ComponentA_Delete( void* class );
+void Stg_ComponentA_Print( void* class, Stream* s );
+void* Stg_ComponentA_Copy( void* self, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+void Stg_ComponentA_Construct( void* component, Stg_ComponentFactory* cf, void* data );
+void Stg_ComponentA_Build( void* component, void* data );
+void Stg_ComponentA_Initialise( void* component, void* data );
+void Stg_ComponentA_Execute( void* component, void* data );
+void Stg_ComponentA_Destroy( void* component, void* data );
+
+void* Stg_ComponentA_NewDefault( Name name )
+{
+	return _Stg_Component_New(
+		sizeof(Stg_ComponentA),
+		"Stg_ComponentA",
+		Stg_ComponentA_Delete,
+		Stg_ComponentA_Print,
+		Stg_ComponentA_Copy,
+		Stg_ComponentA_NewDefault,
+		Stg_ComponentA_Construct,
+		Stg_ComponentA_Build,
+		Stg_ComponentA_Initialise,
+		Stg_ComponentA_Execute,
+		Stg_ComponentA_Destroy,
+		name,
+		NON_GLOBAL );
+}
+void Stg_ComponentA_Delete( void* class ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)class;
+	
+	Stg_Class_Delete( self->c );
+	Stg_Class_Delete( self->b );
+
+	_Stg_Component_Delete( self );
+}
+void Stg_ComponentA_Print( void* class, Stream* s ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)class;
+
+	Journal_Printf(
+		s,
+		"%s %s %d,\n", self->name, self->type, Memory_CountGet( self ) );
+	Print( self->b, s );
+	Print( self->c, s );
+}
+void* Stg_ComponentA_Copy( void* class, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)class;
+	Stg_ComponentA* newCopy;
+	
+	newCopy = _Stg_Component_Copy( self, dest, deep, nameExt, ptrMap );
+	PtrMap_Append( ptrMap, self, newCopy );
+	
+	newCopy->b = Stg_Class_Copy( self->b, dest, deep, nameExt, ptrMap );
+	newCopy->c = Stg_Class_Copy( self->c, dest, deep, nameExt, ptrMap );
+	
+	return newCopy;
+}
+void Stg_ComponentA_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)component;
+
+	self->b =  Stg_ComponentFactory_ConstructByName(  cf,  "b", Stg_ComponentB,  True, data  ) ;
+	self->c =  Stg_ComponentFactory_ConstructByName(  cf,  "c", Stg_ComponentC,  True, data  ) ;
+}
+void Stg_ComponentA_Build( void* component, void* data ) {
+	Stg_ComponentA* self = (Stg_ComponentA*)component;
+	
+	Build( self->b, data, False );
+	Build( self->c, data, False );
+}
+void Stg_ComponentA_Initialise( void* component, void* data ) {
+
+}
+void Stg_ComponentA_Execute( void* component, void* data ) {
+
+}
+void Stg_ComponentA_Destroy( void* component, void* data ) {
+
+}
+
+#define __Stg_ComponentB \
+	__Stg_Component
+struct Stg_ComponentB { __Stg_ComponentB };
+
+void* Stg_ComponentB_NewDefault( Name name );
+void Stg_ComponentB_Delete( void* class );
+void Stg_ComponentB_Print( void* class, Stream* s );
+void* Stg_ComponentB_Copy( void* self, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+void Stg_ComponentB_Construct( void* component, Stg_ComponentFactory* cf, void* data );
+void Stg_ComponentB_Build( void* component, void* data );
+void Stg_ComponentB_Initialise( void* component, void* data );
+void Stg_ComponentB_Execute( void* component, void* data );
+void Stg_ComponentB_Destroy( void* component, void* data );
+
+void* Stg_ComponentB_NewDefault( Name name )
+{
+	return _Stg_Component_New(
+		sizeof(Stg_ComponentB),
+		"Stg_ComponentB",
+		Stg_ComponentB_Delete,
+		Stg_ComponentB_Print,
+		Stg_ComponentB_Copy,
+		Stg_ComponentB_NewDefault,
+		Stg_ComponentB_Construct,
+		Stg_ComponentB_Build,
+		Stg_ComponentB_Initialise,
+		Stg_ComponentB_Execute,
+		Stg_ComponentB_Destroy,
+		name,
+		NON_GLOBAL );
+}
+void Stg_ComponentB_Delete( void* class ) {
+	Stg_ComponentB* self = (Stg_ComponentB*)class;
+	
+	_Stg_Component_Delete( self );
+}
+void Stg_ComponentB_Print( void* class, Stream* s ) {
+	Stg_ComponentB* self = (Stg_ComponentB*)class;
+
+	Journal_Printf(
+		s,
+		"%s %s %d,\n", self->name, self->type, Memory_CountGet( self ) );
+}
+void* Stg_ComponentB_Copy( void* class, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Stg_ComponentB* self = (Stg_ComponentB*)class;
+	Stg_ComponentB* newCopy;
+	
+	newCopy = _Stg_Component_Copy( self, dest, deep, nameExt, ptrMap );
+	PtrMap_Append( ptrMap, self, newCopy );
+	
+	return newCopy;
+}
+void Stg_ComponentB_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+}
+void Stg_ComponentB_Build( void* component, void* data ) {
+}
+void Stg_ComponentB_Initialise( void* component, void* data ) {
+}
+void Stg_ComponentB_Execute( void* component, void* data ) {
+}
+void Stg_ComponentB_Destroy( void* component, void* data ) {
+}
+
+
+#define __Stg_ComponentC \
+	__Stg_Component \
+	Stg_ComponentB* b;
+struct Stg_ComponentC { __Stg_ComponentC };
+
+void* Stg_ComponentC_NewDefault( Name name );
+void Stg_ComponentC_Delete( void* class );
+void Stg_ComponentC_Print( void* class, Stream* s );
+void* Stg_ComponentC_Copy( void* self, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+void Stg_ComponentC_Construct( void* component, Stg_ComponentFactory* cf, void* data );
+void Stg_ComponentC_Build( void* component, void* data );
+void Stg_ComponentC_Initialise( void* component, void* data );
+void Stg_ComponentC_Execute( void* component, void* data );
+void Stg_ComponentC_Destroy( void* component, void* data );
+
+void* Stg_ComponentC_NewDefault( Name name )
+{
+	return _Stg_Component_New(
+		sizeof(Stg_ComponentC),
+		"Stg_ComponentC",
+		Stg_ComponentC_Delete,
+		Stg_ComponentC_Print,
+		Stg_ComponentC_Copy,
+		Stg_ComponentC_NewDefault,
+		Stg_ComponentC_Construct,
+		Stg_ComponentC_Build,
+		Stg_ComponentC_Initialise,
+		Stg_ComponentC_Execute,
+		Stg_ComponentC_Destroy,
+		name,
+		NON_GLOBAL );
+}
+void Stg_ComponentC_Delete( void* class ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)class;
+	
+	Stg_Class_Delete( self->b );
+
+	_Stg_Component_Delete( self );
+}
+void Stg_ComponentC_Print( void* class, Stream* s ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)class;
+
+	Journal_Printf(
+		s,
+		"%s %s %d,\n", self->name, self->type, Memory_CountGet( self ) );
+	Print( self->b, s );
+}
+void* Stg_ComponentC_Copy( void* class, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)class;
+	Stg_ComponentC* newCopy;
+	
+	newCopy = _Stg_Component_Copy( self, dest, deep, nameExt, ptrMap );
+	PtrMap_Append( ptrMap, self, newCopy );
+
+	newCopy->b = Stg_Class_Copy( self->b, dest, deep, nameExt, ptrMap );
+
+	return newCopy;
+}
+void Stg_ComponentC_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)component;
+
+	self->b =  Stg_ComponentFactory_ConstructByName(  cf,  "b", Stg_ComponentB,  True, data  ) ;
+}
+void Stg_ComponentC_Build( void* component, void* data ) {
+	Stg_ComponentC* self = (Stg_ComponentC*)component;
+	
+	Build( self->b, data, False );
+}
+void Stg_ComponentC_Initialise( void* component, void* data ) {
+
+}
+void Stg_ComponentC_Execute( void* component, void* data ) {
+
+}
+void Stg_ComponentC_Destroy( void* component, void* data ) {
+
+}
+
+
+
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Automation/Stg_Component" );
+	
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, __FILE__ );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Stg_ComponentA* a;
+		Stg_ComponentA* aCopy;
+		XML_IO_Handler* ioHandler;
+		Dictionary* dictionary;
+		Dictionary* componentDictionary;
+
+		Stg_ComponentFactory* cf;
+
+		Stg_ComponentRegister_Add( 
+			Stg_ComponentRegister_Get_ComponentRegister(), 
+			Stg_ComponentA_Type, 
+			"0", 
+			(Stg_Component_DefaultConstructorFunction*)Stg_ComponentA_NewDefault );
+
+		Stg_ComponentRegister_Add( 
+			Stg_ComponentRegister_Get_ComponentRegister(), 
+			Stg_ComponentB_Type,
+			"0",
+			(Stg_Component_DefaultConstructorFunction*)Stg_ComponentB_NewDefault );
+
+		Stg_ComponentRegister_Add( 
+			Stg_ComponentRegister_Get_ComponentRegister(), 
+			Stg_ComponentC_Type,
+			"0",
+			(Stg_Component_DefaultConstructorFunction*)Stg_ComponentC_NewDefault );
+
+		/* Create the application's dictionary */
+		dictionary = Dictionary_New();
+                                                                                                                                    
+		/* Read input */
+		ioHandler = XML_IO_Handler_New();
+		IO_Handler_ReadAllFromFile( ioHandler, "data/copy.xml", dictionary );
+                                                                                                                                    
+		Journal_ReadFromDictionary( dictionary );
+
+		componentDictionary = Dictionary_GetDictionary( dictionary, "components" );
+		if ( componentDictionary ) {
+			cf = Stg_ComponentFactory_New( dictionary, componentDictionary, Stg_ObjectList_New() );
+
+			Stg_ComponentFactory_CreateComponents( cf );
+			Stg_ComponentFactory_ConstructComponents( cf, 0 /* dummy */ );
+
+			a = (Stg_ComponentA*)LiveComponentRegister_Get( cf->LCRegister, "a" );
+			
+			RegressionTest_Check(
+				a != NULL &&
+				a->b != NULL &&
+				a->c != NULL &&
+				a->b == a->c->b,
+				stream,
+				"Stg_Components creation",
+				"Can we create the components from dictionary" );
+
+			if ( a ) {
+				Print( a, stream );
+				
+				aCopy = Stg_Class_Copy( a, NULL, True, "_dup", NULL );
+
+				/* Disown the copy. Why? Because main() doesn't own the original neither.
+				 * The instance counting then matches up.
+				 */
+				Stg_Component_Disown( aCopy );
+
+				RegressionTest_Check(
+					aCopy != NULL &&
+					aCopy->b != NULL &&
+					aCopy->c != NULL &&
+					aCopy->b == aCopy->c->b,
+					stream,
+					"Stg_Components copy",
+					"Can we copy the components and subcomponents correctly" );
+
+				if ( aCopy ) {
+					Print( aCopy, stream );
+				}
+
+				RegressionTest_Check(
+					Memory_CountGet( a ) == Memory_CountGet( aCopy ) &&
+					Memory_CountGet( a->b ) == Memory_CountGet( aCopy->b ) &&
+					Memory_CountGet( a->c ) == Memory_CountGet( aCopy->c ),
+					stream,
+					"Instance counter",
+					"Are the instance counters correct" );
+				
+				Print( cf->LCRegister, stream );
+			}
+
+		}
+
+		Stg_Class_Delete( ioHandler );
+		Stg_Class_Delete( dictionary );
+	}
+
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+
+	RegressionTest_Finalise();
+	
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,39 @@
+<?xml version="1.0"?><!DOCTYPE StGermainData SYSTEM "stgermain.dtd"><!-- DTD to validate against --><StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003"><param name="Name">Stg_Component</param><param name="Author">CSD Team</param><param name="Organisation">VPAC</param><param name="Description">An abstract class representing the parent of all Components</param><param name="Copyright">StGermain Framework. Copyright (C) 2003-2005 VPAC.</param><param name="License">The VPAC Public License Version 1.0-rc1. The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html</param><list name="Params"></list><list name="Dependencies"></list></StGermainData></StGermainData>
+Name: blah
+Type: Variable
+Project: StGermain
+Location: ./StGermain/Base/Automation/src/
+Project Web: https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome
+Copyright: StGermain Framework. Copyright (C) 2003-2005 VPAC.
+License: The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html
+Parent: Stg_Component
+Description: ...
+isValid: 1
+All dependencies
+	Dependency
+Essential dependencies
+Optional dependencies
+	Dependency
+Missing dependencies
+Unexpected dependencies
+All params
+	VectorComponentCount
+Name: vc
+Type: CompositeVC
+Project: StGermain
+Location: ./StGermain/Base/Automation/src/
+Project Web: https://csd.vpac.org/twiki/bin/view/Stgermain/WebHome
+Copyright: StGermain Framework. Copyright (C) 2003-2005 VPAC.
+License: The Gnu Lesser General Public License http://www.gnu.org/licenses/lgpl.html
+Parent: VariableCondition
+Description: ...
+isValid: 1
+All dependencies
+	Data
+Essential dependencies
+Optional dependencies
+	Data
+Missing dependencies
+Unexpected dependencies
+All params
+	vcName

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testComponentMetadata " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testComponentMetadata.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,122 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+** 	Tests Stg_Component copying
+**
+** $Id: testLiveComponentRegister.c 2136 2005-05-10 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+/* This prototype might be removed later on */
+const char* Stg_Component_GetMetadata();
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+
+	RegressionTest_Init( "Base/Automation/Stg_Component" );
+	
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, __FILE__ );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		Stg_ComponentMeta* metaTest;
+
+		XML_IO_Handler* io;
+		Dictionary* allDict;
+		Dictionary* compDict;
+
+		CompositeVC* vc;
+		
+		Journal_Printf( stream, "%s\n", Stg_Component_GetMetadata() );
+
+		metaTest = Stg_Component_CreateMeta( "blah", Variable_Type );
+		Stg_Class_Print( metaTest, stream );
+		Stg_Class_Delete( metaTest );
+
+		allDict = Dictionary_New();
+		io = XML_IO_Handler_New();
+		IO_Handler_ReadAllFromFile( io, "data/metatest.xml", allDict );
+		compDict = Dictionary_GetDictionary( allDict, "components" );
+		vc = CompositeVC_DefaultNew( "vc" );	
+		
+		metaTest = Stg_Component_Validate( vc, CompositeVC_Type, compDict );
+		Stg_Class_Print( metaTest, stream );
+		Stg_Class_Delete( metaTest );
+
+		Stg_Class_Delete( io );
+		Stg_Class_Delete( compDict );
+	}
+
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+
+	RegressionTest_Finalise();
+	
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,14 @@
+ConditionFunction (ptr): 0x8076578
+	apply (func ptr): 0x804b484
+	name (ptr): 0x8063691
+		name: quadratic
+Stg_Class (ptr): 0x8076578
+	sizeOfSelf: 36
+	_deleteSelf: Yes
+	type: ConditionFunction
+	_delete (func ptr): 0x804b793
+	_print (func ptr): 0x804b7bc
+	_copy (func ptr): (nil)
+Apply:
+	index: 4
+	var_I: 2

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testConditionFunction " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,95 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testConditionFunction.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+void func(Index index, Variable_Index var_I, void* context, void* result)
+{
+	printf("Apply:\n");
+	printf("\tindex: %u\n", index);
+	printf("\tvar_I: %u\n", var_I);
+}
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	
+	stream = Journal_Register (Info_Type, "myStream");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		ConditionFunction*	cf;
+
+		cf = ConditionFunction_New(func, "quadratic");
+		Print(cf, stream);
+
+		ConditionFunction_Apply(cf, 4, 2, NULL, NULL);
+
+		Stg_Class_Delete(cf);
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,65 @@
+ConditionFunction_Register (ptr): 0x8076708
+	count: 0
+	_size: 8
+	_delta: 8
+	_cf (ptr): 0x8076738
+Stg_Class (ptr): 0x8076708
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: ConditionFunction_Register
+	_delete (func ptr): 0x804bb99
+	_print (func ptr): 0x804bbd9
+	_copy (func ptr): (nil)
+Add test:
+	Pass 1:
+		count: 1
+		_size: 8
+		_delta: 8
+	Pass 2:
+		count: 2
+		_size: 8
+		_delta: 8
+	Pass 3:
+		count: 3
+		_size: 8
+		_delta: 8
+	Pass 4:
+		count: 4
+		_size: 8
+		_delta: 8
+	Pass 5:
+		count: 5
+		_size: 8
+		_delta: 8
+	Pass 6:
+		count: 6
+		_size: 8
+		_delta: 8
+	Pass 7:
+		count: 7
+		_size: 8
+		_delta: 8
+	Pass 8:
+		count: 8
+		_size: 8
+		_delta: 8
+	Pass 9:
+		count: 9
+		_size: 16
+		_delta: 8
+	Pass 10:
+		count: 10
+		_size: 16
+		_delta: 8
+
+GetIndex test:
+	name: testCF0 - index: 0
+	name: testCF1 - index: 1
+	name: testCF2 - index: 2
+	name: testCF3 - index: 3
+	name: testCF4 - index: 4
+	name: testCF5 - index: 5
+	name: testCF6 - index: 6
+	name: testCF7 - index: 7
+	name: testCF8 - index: 8
+	name: testCF9 - index: 9

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testConditionFunction_Register " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testConditionFunction_Register.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,113 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testConditionFunction_Register.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define ARRAY_SIZE	4
+#define STRUCT_SIZE	4
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+	
+	stream = Journal_Register (Info_Type, "myStream");
+
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		ConditionFunction_Register*		reg;
+		ConditionFunction*	cf[10];
+		char*			name[10] = {"testCF0", "testCF1", "testCF2", "testCF3",
+						"testCF4", "testCF5", "testCF6", "testCF7",
+						"testCF8", "testCF9"};
+		Index			i;
+
+		for (i = 0; i < 10; i++)
+			cf[i] = ConditionFunction_New(NULL, name[i]);
+
+		reg = ConditionFunction_Register_New();
+		Print(reg, stream);
+
+		printf("Add test:\n");
+		for (i = 0; i < 10; i++)
+		{
+			ConditionFunction_Register_Add(reg, cf[i]);
+
+			printf("\tPass %u:\n", i + 1);
+			printf("\t\tcount: %u\n", reg->count);
+			printf("\t\t_size: %lu\n", reg->_size);
+			printf("\t\t_delta: %lu\n", reg->_delta);
+		}
+
+		printf("\nGetIndex test:\n");
+		for (i = 0; i < 10; i++)
+			printf("\tname: %s - index: %u\n", name[i], ConditionFunction_Register_GetIndex(reg, name[i]));
+
+		Stg_Class_Delete(reg);
+		for (i = 0; i < 10; i++)	
+			Stg_Class_Delete(cf[i]);
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,68 @@
+IsChild( A_Type, A_Type ) = True
+IsChild( A_Type, B_Type ) = False
+IsChild( A_Type, C_Type ) = False
+IsChild( A_Type, D_Type ) = False
+IsChild( A_Type, AA_Type ) = False
+IsChild( A_Type, BB_Type ) = False
+
+IsChild( B_Type, A_Type ) = True
+IsChild( B_Type, B_Type ) = True
+IsChild( B_Type, C_Type ) = False
+IsChild( B_Type, D_Type ) = False
+IsChild( B_Type, AA_Type ) = False
+IsChild( B_Type, BB_Type ) = False
+
+IsChild( C_Type, A_Type ) = True
+IsChild( C_Type, B_Type ) = True
+IsChild( C_Type, C_Type ) = True
+IsChild( C_Type, D_Type ) = False
+IsChild( C_Type, AA_Type ) = False
+IsChild( C_Type, BB_Type ) = False
+
+IsChild( D_Type, A_Type ) = True
+IsChild( D_Type, B_Type ) = True
+IsChild( D_Type, C_Type ) = True
+IsChild( D_Type, D_Type ) = True
+IsChild( D_Type, AA_Type ) = False
+IsChild( D_Type, BB_Type ) = False
+
+IsChild( AA_Type, A_Type ) = False
+IsChild( AA_Type, B_Type ) = False
+IsChild( AA_Type, C_Type ) = False
+IsChild( AA_Type, D_Type ) = False
+IsChild( AA_Type, AA_Type ) = True
+IsChild( AA_Type, BB_Type ) = False
+
+IsChild( BB_Type, A_Type ) = False
+IsChild( BB_Type, B_Type ) = False
+IsChild( BB_Type, C_Type ) = False
+IsChild( BB_Type, D_Type ) = False
+IsChild( BB_Type, AA_Type ) = True
+IsChild( BB_Type, BB_Type ) = True
+
+Type 'A' inherits from:
+Type 'B' inherits from:
+	A
+Type 'C' inherits from:
+	B
+	A
+Type 'D' inherits from:
+	C
+	B
+	A
+Type 'AA' inherits from:
+Type 'BB' inherits from:
+	AA
+A 			 (Abstract Class)
+	B 			 (Abstract Class)
+		C 			 (Abstract Class)
+			D 			 (Abstract Class)
+B 			 (Abstract Class)
+	C 			 (Abstract Class)
+		D 			 (Abstract Class)
+C 			 (Abstract Class)
+	D 			 (Abstract Class)
+D 			 (Abstract Class)
+AA 			 (Abstract Class)
+	BB 			 (Abstract Class)
+BB 			 (Abstract Class)

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testHierarchyTable " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testHierarchyTable.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,163 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+** 	Tests Stg_Component copying
+**
+** $Id: testHierarchyTable.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include "Regresstor/libRegresstor/Regresstor.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+const Type A_Type = "A";
+const Type B_Type = "B";
+const Type C_Type = "C";
+const Type D_Type = "D";
+const Type AA_Type = "AA";
+const Type BB_Type = "BB";
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, __FILE__ );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		HierarchyTable* hierarchyTable = HierarchyTable_GetHierarchyTable();
+
+		RegisterParent( B_Type, A_Type );
+		RegisterParent( C_Type, B_Type );
+		RegisterParent( D_Type, C_Type );
+		
+		RegisterParent( BB_Type, AA_Type );
+
+		Journal_PrintBool( stream, IsChild( A_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( A_Type, BB_Type ) ); 		
+		Journal_Printf( stream, "\n");
+
+		Journal_PrintBool( stream, IsChild( B_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( B_Type, BB_Type ) ); 	
+		Journal_Printf( stream, "\n");
+		
+		Journal_PrintBool( stream, IsChild( C_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( C_Type, BB_Type ) ); 
+		Journal_Printf( stream, "\n");
+
+		Journal_PrintBool( stream, IsChild( D_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( D_Type, BB_Type ) ); 	
+		Journal_Printf( stream, "\n");
+
+		Journal_PrintBool( stream, IsChild( AA_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( AA_Type, BB_Type ) ); 
+		Journal_Printf( stream, "\n");
+
+		Journal_PrintBool( stream, IsChild( BB_Type, A_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, B_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, C_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, D_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, AA_Type ) ); 	
+		Journal_PrintBool( stream, IsChild( BB_Type, BB_Type ) ); 
+		Journal_Printf( stream, "\n");
+
+		HierarchyTable_PrintParents( hierarchyTable, A_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, B_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, C_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, D_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, AA_Type, stream );
+		HierarchyTable_PrintParents( hierarchyTable, BB_Type, stream );
+		
+		HierarchyTable_PrintChildren( hierarchyTable, A_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, B_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, C_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, D_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, AA_Type, stream );
+		HierarchyTable_PrintChildren( hierarchyTable, BB_Type, stream );
+	}
+
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,274 @@
+Inserting live components into the LiveComponentRegistry
+Printing the LiveComponentRegister:LiveComponentRegister (ptr): 0x805c068
+Stg_Class (ptr): 0x805c068
+	sizeOfSelf: 28
+	_deleteSelf: Yes
+	type: LiveComponentRegister
+	_delete (func ptr): 0xb7f14e4b
+	_print (func ptr): 0xb7f14ed6
+	_copy (func ptr): (nil)
+componentList (ptr): 0x805c0f0
+Stg_ObjectList (ptr):0x805c0f0
+	Stg_Class (ptr): 0x805c0f0
+		sizeOfSelf: 96
+		_deleteSelf: Yes
+		type: Stg_ObjectList
+		_delete (func ptr): 0xb7ed48ce
+		_print (func ptr): 0xb7ed4905
+		_copy (func ptr): 0xb7ed4ba7
+	_append(func ptr): 0xb7ed580b
+	_prepend(func ptr): 0xb7ed58d1
+	_replaceAll(func ptr): 0xb7ed5995
+	_replace(func ptr): 0xb7ed5a4e
+	_insertBefore(func ptr): 0xb7ed5beb
+	_insertAfter(func ptr): 0xb7ed5da6
+	_remove(func ptr): 0xb7ed5f63
+	_getIndex(func ptr): 0xb7ed6009
+	_get(func ptr): 0xb7ed60b7
+	_allocMoreMemory(func ptr): 0xb7ed628a
+	_insertAtIndex(func ptr): 0xb7ed6310
+	_removeByIndex(func ptr): 0xb7ed638e
+	_deleteAllObjects(func ptr): 0xb7ed620b
+	_size: 8
+	_delta: 8
+	_noJournalingInCopy: 0
+	count: 5
+	data[0-5]:
+	Stg_Component (ptr): 0x805aee8
+	Stg_Object (ptr): 0x805aee8
+		Stg_Class (ptr): 0x805aee8
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: Scalar
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: Scalar-Construct
+		build function name: Scalar-Build
+		initialise function name: Scalar-Initialise
+		execute function name: Scalar-Execute
+		destroy function name: Scalar-Destroy
+	Variable (ptr): (0x805aee8)
+		offsetCount: 1
+		offsets (ptr): 0x805acd8
+			offsets[0]: 0
+		dataTypes (ptr): 0x805ac50
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805b398
+			dataTypeCounts[0]: 1
+		dataSizes (ptr): 0x805c090
+			dataSizes[0]: 4
+		components (ptr): 0x805b3a8
+			components[0] (ptr): (nil)
+		structSize: 4
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805a7a0
+		arrayPtrPtr (ptr): 0xbfc30e3c
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+	Stg_Component (ptr): 0x805b3b8
+	Stg_Object (ptr): 0x805b3b8
+		Stg_Class (ptr): 0x805b3b8
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: Three
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: Three-Construct
+		build function name: Three-Build
+		initialise function name: Three-Initialise
+		execute function name: Three-Execute
+		destroy function name: Three-Destroy
+	Variable (ptr): (0x805b3b8)
+		offsetCount: 1
+		offsets (ptr): 0x805b6a8
+			offsets[0]: 0
+		dataTypes (ptr): 0x805b6b8
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805b6c8
+			dataTypeCounts[0]: 3
+		dataSizes (ptr): 0x805c0a0
+			dataSizes[0]: 12
+		components (ptr): 0x805b6d8
+			components[0] (ptr): 0x805b6f0
+			components[0]: a
+		structSize: 12
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805adf8
+		arrayPtrPtr (ptr): 0xbfc30e38
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+	Stg_Component (ptr): 0x805b6f0
+	Stg_Object (ptr): 0x805b6f0
+		Stg_Class (ptr): 0x805b6f0
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: a
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: a-Construct
+		build function name: a-Build
+		initialise function name: a-Initialise
+		execute function name: a-Execute
+		destroy function name: a-Destroy
+	Variable (ptr): (0x805b6f0)
+		offsetCount: 1
+		offsets (ptr): 0x805b9d8
+			offsets[0]: 0
+		dataTypes (ptr): 0x805b9e8
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805b9f8
+			dataTypeCounts[0]: 1
+		dataSizes (ptr): 0x805c0b0
+			dataSizes[0]: 4
+		components (ptr): 0x805ba08
+			components[0] (ptr): (nil)
+		structSize: 12
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805adf8
+		arrayPtrPtr (ptr): 0xbfc30e38
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+	Stg_Component (ptr): 0x805ba18
+	Stg_Object (ptr): 0x805ba18
+		Stg_Class (ptr): 0x805ba18
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: b
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: b-Construct
+		build function name: b-Build
+		initialise function name: b-Initialise
+		execute function name: b-Execute
+		destroy function name: b-Destroy
+	Variable (ptr): (0x805ba18)
+		offsetCount: 1
+		offsets (ptr): 0x805bd00
+			offsets[0]: 4
+		dataTypes (ptr): 0x805bd10
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805bd20
+			dataTypeCounts[0]: 1
+		dataSizes (ptr): 0x805c0c0
+			dataSizes[0]: 4
+		components (ptr): 0x805bd30
+			components[0] (ptr): (nil)
+		structSize: 12
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805adf8
+		arrayPtrPtr (ptr): 0xbfc30e38
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+	Stg_Component (ptr): 0x805bd40
+	Stg_Object (ptr): 0x805bd40
+		Stg_Class (ptr): 0x805bd40
+			sizeOfSelf: 152
+			_deleteSelf: Yes
+			type: Variable
+			_delete (func ptr): 0xb7f084a0
+			_print (func ptr): 0xb7f08538
+			_copy (func ptr): 0xb7f08921
+		name: c
+		nameAllocationType: NON_GLOBAL
+		_defaultConstructor (func ptr): 0xb7f07986
+		_construct (func ptr): 0xb7f095c2
+		_build (func ptr): 0xb7f090a2
+		_initialise (func ptr): 0xb7f095b8
+		_execute (func ptr): 0xb7f095bd
+		_destroy (func ptr): 0xb7f09b1a
+		isConstructed: True
+		isBuilt: True
+		isInitialised: False
+		hasExecuted: False
+		isDestroyed: False
+		constructor function name: c-Construct
+		build function name: c-Build
+		initialise function name: c-Initialise
+		execute function name: c-Execute
+		destroy function name: c-Destroy
+	Variable (ptr): (0x805bd40)
+		offsetCount: 1
+		offsets (ptr): 0x805c028
+			offsets[0]: 8
+		dataTypes (ptr): 0x805c038
+			dataTypes[0]: 4
+		dataTypeCounts (ptr): 0x805c048
+			dataTypeCounts[0]: 1
+		dataSizes (ptr): 0x805c0d0
+			dataSizes[0]: 4
+		components (ptr): 0x805c058
+			components[0] (ptr): (nil)
+		structSize: 12
+		structSizePtr (ptr): (nil)
+		arrayPtr (ptr): 0x805adf8
+		arrayPtrPtr (ptr): 0xbfc30e38
+		arraySize: 10
+		arraySizePtr (ptr): 0xbfc30e08
+		allocateSelf = False
+Retrieving live component references from the LiveComponentRegistry
+Retrieval Successful
+Retrieval Successful
+Retrieval Successful
+Retrieval Successful
+Retrieval Successful
+Deleting the LiveComponentRegister:
\ No newline at end of file

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testLiveComponentRegister " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testLiveComponentRegister.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,177 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+** 	Tests the Float macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testLiveComponentRegister.c 2136 2005-05-10 02:47:13Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testLiveComponentRegister" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef float Triple[3];
+
+		float* array;
+		Triple* structArray;
+
+		LiveComponentRegister *LCRegister = NULL;
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+		Variable* tempVar = NULL;
+		Index length = 10;
+
+		Variable_Register* reg;
+
+		array = Memory_Alloc_Array( float, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Float,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Float,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		LCRegister = LiveComponentRegister_New( );
+		Journal_Printf( stream, "Inserting live components into the LiveComponentRegistry\n" );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) var );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) vec );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) vecVar[0] );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) vecVar[1] );
+		LiveComponentRegister_Add( LCRegister, (Stg_Component*) vecVar[2] );
+
+		Journal_Printf( stream, "Printing the LiveComponentRegister:" );
+		Print( LCRegister, stream );
+		
+		Journal_Printf( stream, "Retrieving live component references from the LiveComponentRegistry\n" );
+	
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "Scalar" );
+		if( tempVar != var ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "Three" );
+		if( tempVar != vec ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "a" );
+		if( tempVar != vecVar[0] ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "b" );
+		if( tempVar != vecVar[1] ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+		tempVar = (Variable*) LiveComponentRegister_Get( LCRegister, "c" );
+		if( tempVar != vecVar[2] ){
+			Journal_Printf( stream, "Retrieval Error..!\n" );
+		}
+		else{
+			Journal_Printf( stream, "Retrieval Successful\n" );
+		}
+
+		Journal_Printf( stream, "Deleting the LiveComponentRegister:" );
+		Stg_Class_Delete( LCRegister );
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,49 @@
+RegisterFactory
+Class (ptr): 0x80c51a8
+Class (ptr): 0x80c51a8
+	sizeOfSelf: 24
+	_deleteSelf: True
+	type: RegisterFactory
+	_delete (func ptr): 0x804c5c0
+	_print (func ptr): 0x804c605
+NamedObjectList (ptr):0x80c51c8
+Class (ptr): 0x80c51c8
+Class (ptr): 0x80c51c8
+	sizeOfSelf: 76
+	_deleteSelf: True
+	type: NamedObjectList
+	_delete (func ptr): 0x805ba93
+	_print (func ptr): 0x805baca
+	_append(func ptr):0x805bca7
+	_prepend(func ptr):0x805bd90
+	_replaceAll(func ptr):0x805be77
+	_replace(func ptr):0x805bf42
+	_insertBefore(func ptr):0x805c10d
+	_insertAfter(func ptr):0x805c2f6
+	_getIndex(func ptr):0x805c4da
+	_get(func ptr):0x805c5af
+	_allocMoreMemory(func ptr):0x805c681
+	_insertAtIndex(func ptr):0x805c707
+	_size: 8
+	_delta: 8
+	data[0-2]:
+NamedObject (ptr): 0x80c5240
+Class (ptr): 0x80c5240
+Class (ptr): 0x80c5240
+	sizeOfSelf: 32
+	_deleteSelf: True
+	type: RegisterFactory_RegisterConstructorFunction
+	_delete (func ptr): 0x805b63c
+	_print (func ptr): 0x805b67c
+	name: NamedObject_Register
+	nameAllocationType: NON_GLOBAL
+NamedObject (ptr): 0x80c5288
+Class (ptr): 0x80c5288
+Class (ptr): 0x80c5288
+	sizeOfSelf: 32
+	_deleteSelf: True
+	type: RegisterFactory_RegisterConstructorFunction
+	_delete (func ptr): 0x805b63c
+	_print (func ptr): 0x805b67c
+	name: Variable_Register
+	nameAllocationType: NON_GLOBAL

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testRegisterFactory " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testRegisterFactory.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,113 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testRegisterFactory.c 2421 2004-12-14 02:09:26Z AlanLo $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+typedef struct {
+	__Stg_Object
+} TestObject;
+
+TestObject* TestObject_New( Name name ) {
+	return (TestObject*)_Stg_Object_New(
+		sizeof(TestObject),
+		"Test",
+		_Stg_Object_Delete,
+		_Stg_Object_Print,
+		NULL, 
+		name,
+		NON_GLOBAL );
+}
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testRegisterFactory" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		RegisterFactory* factory;
+
+		NamedObject_Register* reg;
+
+		factory = RegisterFactory_New();
+
+		RegisterFactory_Register( factory, NamedObject_Register_Type, (void*)NamedObject_Register_New );
+		RegisterFactory_Register( factory, Variable_Register_Type, (void*)Variable_Register_New );
+
+		reg = (NamedObject_Register*)RegisterFactory_Create( factory, NamedObject_Register_Type );
+
+		NamedObject_Register_Add( reg, TestObject_New( "a" ) );
+		NamedObject_Register_Add( reg, TestObject_New( "b" ) );
+		NamedObject_Register_Add( reg, TestObject_New( "c" ) );
+	
+		Print( factory, stream );
+	
+		Stg_Class_Delete( reg );
+		Stg_Class_Delete( factory );
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x8064960
+	dictionary (ptr): 0x805b468
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c7d0
+		_entryTbl[0]:
+			varName (ptr): 0x805bb10
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x8064c48
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bc00
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c088
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c328
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8064960
+Stg_Component (ptr): 0x8064960
+Stg_Object (ptr): 0x8064960
+	Stg_Class (ptr): 0x8064960
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7f9079d
+		_print (func ptr): 0xb7f907e3
+		_copy (func ptr): 0xb7f90ca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f8fdb6
+	_construct (func ptr): 0xb7f8c58a
+	_build (func ptr): 0xb7f8c58f
+	_initialise (func ptr): 0xb7f8c906
+	_execute (func ptr): 0xb7f8c9ca
+	_destroy (func ptr): 0xb7f8c9fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7f90e62
+	_getVariableCount (func ptr): 0xb7f90e91
+	_getVariableIndex (func ptr): 0xb7f90ea8
+	_getValueIndex (func ptr): 0xb7f90eef
+	_getValueCount (func ptr): 0xb7f90ef7
+	_getValue (func ptr): 0xb7f90f0e
+	variable_Register (ptr): 0x8066248
+	conFunc_Register (ptr): 0x8065548
+	_set (ptr): 0x805c820
+	indexCount: 14
+	indexTbl (ptr): 0x805c860
+		indexTbl[0]: 0
+		indexTbl[1]: 2
+		indexTbl[2]: 4
+		indexTbl[3]: 6
+		indexTbl[4]: 8
+		indexTbl[5]: 10
+		indexTbl[6]: 12
+		indexTbl[7]: 14
+		indexTbl[8]: 16
+		indexTbl[9]: 18
+		indexTbl[10]: 20
+		indexTbl[11]: 22
+		indexTbl[12]: 24
+		indexTbl[13]: 26
+	vcVarCountTbl (ptr): 0x805c8a8
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+	vcTbl (ptr): 0x805c8f0
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x80650b8
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x805c328
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x80649f8
+	dictionary (ptr): 0x805b500
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c890
+		_entryTbl[0]:
+			varName (ptr): 0x8065150
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba90
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bcb8
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c140
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3e0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x80649f8
+Stg_Component (ptr): 0x80649f8
+Stg_Object (ptr): 0x80649f8
+	Stg_Class (ptr): 0x80649f8
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7fc179d
+		_print (func ptr): 0xb7fc17e3
+		_copy (func ptr): 0xb7fc1ca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fc0db6
+	_construct (func ptr): 0xb7fbd58a
+	_build (func ptr): 0xb7fbd58f
+	_initialise (func ptr): 0xb7fbd906
+	_execute (func ptr): 0xb7fbd9ca
+	_destroy (func ptr): 0xb7fbd9fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7fc1e62
+	_getVariableCount (func ptr): 0xb7fc1e91
+	_getVariableIndex (func ptr): 0xb7fc1ea8
+	_getValueIndex (func ptr): 0xb7fc1eef
+	_getValueCount (func ptr): 0xb7fc1ef7
+	_getValue (func ptr): 0xb7fc1f0e
+	variable_Register (ptr): 0x80662f0
+	conFunc_Register (ptr): 0x80655f0
+	_set (ptr): 0x805c8e0
+	indexCount: 14
+	indexTbl (ptr): 0x805c920
+		indexTbl[0]: 0
+		indexTbl[1]: 2
+		indexTbl[2]: 4
+		indexTbl[3]: 6
+		indexTbl[4]: 8
+		indexTbl[5]: 10
+		indexTbl[6]: 12
+		indexTbl[7]: 14
+		indexTbl[8]: 16
+		indexTbl[9]: 18
+		indexTbl[10]: 20
+		indexTbl[11]: 22
+		indexTbl[12]: 24
+		indexTbl[13]: 26
+	vcVarCountTbl (ptr): 0x805c968
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+	vcTbl (ptr): 0x805c9b0
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8065160
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x805c3e0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x8064a00
+	dictionary (ptr): 0x805b508
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c898
+		_entryTbl[0]:
+			varName (ptr): 0x8065158
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba98
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bcc0
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c148
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3e8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x8064a00
+Stg_Component (ptr): 0x8064a00
+Stg_Object (ptr): 0x8064a00
+	Stg_Class (ptr): 0x8064a00
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7f0c79d
+		_print (func ptr): 0xb7f0c7e3
+		_copy (func ptr): 0xb7f0cca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f0bdb6
+	_construct (func ptr): 0xb7f0858a
+	_build (func ptr): 0xb7f0858f
+	_initialise (func ptr): 0xb7f08906
+	_execute (func ptr): 0xb7f089ca
+	_destroy (func ptr): 0xb7f089fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7f0ce62
+	_getVariableCount (func ptr): 0xb7f0ce91
+	_getVariableIndex (func ptr): 0xb7f0cea8
+	_getValueIndex (func ptr): 0xb7f0ceef
+	_getValueCount (func ptr): 0xb7f0cef7
+	_getValue (func ptr): 0xb7f0cf0e
+	variable_Register (ptr): 0x80662f8
+	conFunc_Register (ptr): 0x80655f8
+	_set (ptr): 0x805c8e8
+	indexCount: 14
+	indexTbl (ptr): 0x805c928
+		indexTbl[0]: 0
+		indexTbl[1]: 2
+		indexTbl[2]: 4
+		indexTbl[3]: 6
+		indexTbl[4]: 8
+		indexTbl[5]: 10
+		indexTbl[6]: 12
+		indexTbl[7]: 14
+		indexTbl[8]: 16
+		indexTbl[9]: 18
+		indexTbl[10]: 20
+		indexTbl[11]: 22
+		indexTbl[12]: 24
+		indexTbl[13]: 26
+	vcVarCountTbl (ptr): 0x805c970
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+	vcTbl (ptr): 0x805c9b8
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8065168
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x805c3e8
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.0of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x80649d8
+	dictionary (ptr): 0x805b4e0
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c870
+		_entryTbl[0]:
+			varName (ptr): 0x8065130
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba70
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bc98
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c120
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3c0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x80649d8
+Stg_Component (ptr): 0x80649d8
+Stg_Object (ptr): 0x80649d8
+	Stg_Class (ptr): 0x80649d8
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7f9079d
+		_print (func ptr): 0xb7f907e3
+		_copy (func ptr): 0xb7f90ca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f8fdb6
+	_construct (func ptr): 0xb7f8c58a
+	_build (func ptr): 0xb7f8c58f
+	_initialise (func ptr): 0xb7f8c906
+	_execute (func ptr): 0xb7f8c9ca
+	_destroy (func ptr): 0xb7f8c9fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7f90e62
+	_getVariableCount (func ptr): 0xb7f90e91
+	_getVariableIndex (func ptr): 0xb7f90ea8
+	_getValueIndex (func ptr): 0xb7f90eef
+	_getValueCount (func ptr): 0xb7f90ef7
+	_getValue (func ptr): 0xb7f90f0e
+	variable_Register (ptr): 0x80662d0
+	conFunc_Register (ptr): 0x80655d0
+	_set (ptr): 0x805c8c0
+	indexCount: 14
+	indexTbl (ptr): 0x805c900
+		indexTbl[0]: 0
+		indexTbl[1]: 2
+		indexTbl[2]: 4
+		indexTbl[3]: 6
+		indexTbl[4]: 8
+		indexTbl[5]: 10
+		indexTbl[6]: 12
+		indexTbl[7]: 14
+		indexTbl[8]: 16
+		indexTbl[9]: 18
+		indexTbl[10]: 20
+		indexTbl[11]: 22
+		indexTbl[12]: 24
+		indexTbl[13]: 26
+	vcVarCountTbl (ptr): 0x805c948
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+	vcTbl (ptr): 0x805c990
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8065140
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x805c3c0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of2.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x80649d8
+	dictionary (ptr): 0x805b4e0
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c870
+		_entryTbl[0]:
+			varName (ptr): 0x8065130
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba70
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bc98
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c120
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3c0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x80649d8
+Stg_Component (ptr): 0x80649d8
+Stg_Object (ptr): 0x80649d8
+	Stg_Class (ptr): 0x80649d8
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7edd79d
+		_print (func ptr): 0xb7edd7e3
+		_copy (func ptr): 0xb7eddca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7edcdb6
+	_construct (func ptr): 0xb7ed958a
+	_build (func ptr): 0xb7ed958f
+	_initialise (func ptr): 0xb7ed9906
+	_execute (func ptr): 0xb7ed99ca
+	_destroy (func ptr): 0xb7ed99fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7edde62
+	_getVariableCount (func ptr): 0xb7edde91
+	_getVariableIndex (func ptr): 0xb7eddea8
+	_getValueIndex (func ptr): 0xb7eddeef
+	_getValueCount (func ptr): 0xb7eddef7
+	_getValue (func ptr): 0xb7eddf0e
+	variable_Register (ptr): 0x80662d0
+	conFunc_Register (ptr): 0x80655d0
+	_set (ptr): 0x805c8c0
+	indexCount: 14
+	indexTbl (ptr): 0x805c900
+		indexTbl[0]: 0
+		indexTbl[1]: 2
+		indexTbl[2]: 4
+		indexTbl[3]: 6
+		indexTbl[4]: 8
+		indexTbl[5]: 10
+		indexTbl[6]: 12
+		indexTbl[7]: 14
+		indexTbl[8]: 16
+		indexTbl[9]: 18
+		indexTbl[10]: 20
+		indexTbl[11]: 22
+		indexTbl[12]: 24
+		indexTbl[13]: 26
+	vcVarCountTbl (ptr): 0x805c948
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+	vcTbl (ptr): 0x805c990
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8065140
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x805c3c0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.1of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,320 @@
+Testing for SetVC
+SetVC (ptr): 0x80649d8
+	dictionary (ptr): 0x805b4e0
+	_dictionaryEntryName (ptr): 0x80498a0
+		_dictionaryEntryName: SetVC
+	_entryCount: 4
+	_entryTbl (ptr): 0x805c870
+		_entryTbl[0]:
+			varName (ptr): 0x8065130
+				varName: vx
+			value:
+				type: VC_ValueType_Double
+				asDouble: 2
+		_entryTbl[1]:
+			varName (ptr): 0x805ba70
+				varName: vy
+			value:
+				type: VC_ValueType_CFIndex
+				asCFIndex: 0
+		_entryTbl[2]:
+			varName (ptr): 0x805bc98
+				varName: vz
+			value:
+				type: VC_ValueType_Double
+				asDouble: 1
+		_entryTbl[3]:
+			varName (ptr): 0x805c120
+				varName: temp
+			value:
+				type: VC_ValueType_DoubleArray
+				arraySize: 5
+				asDoubleArray (ptr): 0x805c3c0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+VariableCondition (ptr): 0x80649d8
+Stg_Component (ptr): 0x80649d8
+Stg_Object (ptr): 0x80649d8
+	Stg_Class (ptr): 0x80649d8
+		sizeOfSelf: 188
+		_deleteSelf: Yes
+		type: SetVC
+		_delete (func ptr): 0xb7f3679d
+		_print (func ptr): 0xb7f367e3
+		_copy (func ptr): 0xb7f36ca1
+	name: SetVC
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f35db6
+	_construct (func ptr): 0xb7f3258a
+	_build (func ptr): 0xb7f3258f
+	_initialise (func ptr): 0xb7f32906
+	_execute (func ptr): 0xb7f329ca
+	_destroy (func ptr): 0xb7f329fa
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: SetVC-Construct
+	build function name: SetVC-Build
+	initialise function name: SetVC-Initialise
+	execute function name: SetVC-Execute
+	destroy function name: SetVC-Destroy
+	_getSet (func ptr): 0xb7f36e62
+	_getVariableCount (func ptr): 0xb7f36e91
+	_getVariableIndex (func ptr): 0xb7f36ea8
+	_getValueIndex (func ptr): 0xb7f36eef
+	_getValueCount (func ptr): 0xb7f36ef7
+	_getValue (func ptr): 0xb7f36f0e
+	variable_Register (ptr): 0x80662d0
+	conFunc_Register (ptr): 0x80655d0
+	_set (ptr): 0x805c8c0
+	indexCount: 14
+	indexTbl (ptr): 0x805c900
+		indexTbl[0]: 0
+		indexTbl[1]: 2
+		indexTbl[2]: 4
+		indexTbl[3]: 6
+		indexTbl[4]: 8
+		indexTbl[5]: 10
+		indexTbl[6]: 12
+		indexTbl[7]: 14
+		indexTbl[8]: 16
+		indexTbl[9]: 18
+		indexTbl[10]: 20
+		indexTbl[11]: 22
+		indexTbl[12]: 24
+		indexTbl[13]: 26
+	vcVarCountTbl (ptr): 0x805c948
+		vcVarCountTbl[0]: 4
+		vcVarCountTbl[1]: 4
+		vcVarCountTbl[2]: 4
+		vcVarCountTbl[3]: 4
+		vcVarCountTbl[4]: 4
+		vcVarCountTbl[5]: 4
+		vcVarCountTbl[6]: 4
+		vcVarCountTbl[7]: 4
+		vcVarCountTbl[8]: 4
+		vcVarCountTbl[9]: 4
+		vcVarCountTbl[10]: 4
+		vcVarCountTbl[11]: 4
+		vcVarCountTbl[12]: 4
+		vcVarCountTbl[13]: 4
+	vcTbl (ptr): 0x805c990
+		vcTbl[0][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[0][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[0][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[0][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[1][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[1][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[1][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[1][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[2][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[2][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[2][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[2][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[3][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[3][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[3][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[3][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[4][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[4][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[4][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[4][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[5][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[5][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[5][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[5][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[6][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[6][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[6][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[6][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[7][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[7][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[7][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[7][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[8][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[8][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[8][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[8][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[9][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[9][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[9][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[9][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[10][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[10][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[10][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[10][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[11][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[11][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[11][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[11][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[12][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[12][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[12][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[12][3]:
+			varIndex: 6
+			valIndex: 3
+		vcTbl[13][0]:
+			varIndex: 3
+			valIndex: 0
+		vcTbl[13][1]:
+			varIndex: 4
+			valIndex: 1
+		vcTbl[13][2]:
+			varIndex: 5
+			valIndex: 2
+		vcTbl[13][3]:
+			varIndex: 6
+			valIndex: 3
+	valueCount: 4
+	valueTbl (ptr): 0x8065140
+		valueTbl[0]:
+			type: VC_ValueType_Double
+			asDouble: 2
+		valueTbl[1]:
+			type: VC_ValueType_CFIndex
+			asCFIndex: 0
+		valueTbl[2]:
+			type: VC_ValueType_Double
+			asDouble: 1
+		valueTbl[3]:
+			type: VC_ValueType_DoubleArray
+			arraySize: 5
+			asDoubleArray (ptr): 0x805c3c0
+				asDoubleArray[0]: 5
+				asDoubleArray[1]: 6
+				asDoubleArray[2]: 7
+				asDoubleArray[3]: 8
+				asDoubleArray[4]: 9
+
+
+var[0]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[1]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[2]: 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[3]: 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 2.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[4]: 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 20.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[5]: 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+var[6]: 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 5.00, 6.00, 7.00, 8.00, 9.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
+
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False True  False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 
+
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX 000 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX 001 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX 002 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX 003 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 
+

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testSetVC " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.2of3.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testSetVC.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,189 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** $Id: testSetVC.c 3462 2006-02-19 06:53:24Z WalterLandry $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+void quadratic(Index index, Variable_Index var_I, void* context, void* result)
+{
+	*(double *)result = 20.0;
+}
+
+
+int main(int argc, char *argv[])
+{
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	Dictionary*		dictionary;
+	XML_IO_Handler*		io_handler;
+	
+	Variable*			var[7];
+	Variable_Register*		variable_Register;
+	VariableCondition*		vc;
+	ConditionFunction*		quadCF;
+	ConditionFunction_Register*	conFunc_Register;
+	
+	double*		array[7];
+	Index		arraySize = 4*4*4;
+	char*		vcKey = "SetVC";
+	char*		varName[] = {"x", "y", "z", "vx", "vy", "vz", "temp"};
+	
+	Index	i, j, k;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init(&argc, &argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &procCount);
+	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register (Info_Type, "myStream");
+
+	io_handler = XML_IO_Handler_New();
+
+	procToWatch = argc >= 2 ? atoi(argv[1]) : 0;
+	
+	dictionary = Dictionary_New();
+	IO_Handler_ReadAllFromFile(io_handler, "data/setVC.xml", dictionary);
+	fflush(stdout);
+	MPI_Barrier(MPI_COMM_WORLD);
+	Dictionary_Add(dictionary, "rank", Dictionary_Entry_Value_FromUnsignedInt(rank));
+	Dictionary_Add(dictionary, "numProcessors", Dictionary_Entry_Value_FromUnsignedInt(procCount));
+	Dictionary_Add(dictionary, "meshSizeI", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "meshSizeJ", Dictionary_Entry_Value_FromUnsignedInt(4));
+	Dictionary_Add(dictionary, "meshSizeK", Dictionary_Entry_Value_FromUnsignedInt(4));
+	
+	/* Create CF stuff */
+	quadCF = ConditionFunction_New(quadratic, "quadratic");
+	conFunc_Register = ConditionFunction_Register_New();
+	ConditionFunction_Register_Add(conFunc_Register, quadCF);
+	
+	/* Create variable register */
+	variable_Register = Variable_Register_New();
+	
+	/* Create variables */
+	for (i = 0; i < 6; i++) {
+		array[i] = Memory_Alloc_Array( double, arraySize, "array[]" );
+		var[i] = Variable_NewScalar( varName[i], Variable_DataType_Double, &arraySize, (void**)&array[i], 0 ); 
+		Variable_Register_Add(variable_Register, var[i]);
+	}
+	array[6] = Memory_Alloc_Array( double , arraySize*5, "array[6]" );
+	var[6] = Variable_NewVector( varName[6], Variable_DataType_Double, 5, &arraySize, (void**)&array[6], 0,
+		"a", "b", "c", "d", "e" );
+	Variable_Register_Add(variable_Register, var[6]);
+	Variable_Register_BuildAll(variable_Register);
+	
+	/* Create AllVC */
+	vc = (VariableCondition*)SetVC_New( "SetVC", vcKey, variable_Register, conFunc_Register, dictionary );
+	Build( vc, 0, False );
+	
+	for (j = 0; j < 6; j++)
+		memset(array[j], 0, sizeof(double)*4*4*4);
+	memset(array[6], 0, sizeof(double)*4*4*4*5);
+	VariableCondition_Apply(vc, NULL);
+	
+	if (rank == procToWatch)
+	{
+		printf("Testing for %s\n", vcKey);
+		Print(vc, stream);
+		printf("\n");
+		for (j = 0; j < 6; j++)
+		{
+			printf("\nvar[%u]: %.2f", j, array[j][0]);
+			for (k = 1; k < 4*4*4; k++)
+				printf(", %.2f", array[j][k]);
+		}
+		printf("\nvar[6]: %.2f", array[6][0]);
+		for (j = 1; j < 4*4*4*5; j++)
+			printf(", %.2f", array[6][j]);
+		printf("\n\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < 4*4*4; k++)
+				printf("%s ", VariableCondition_IsCondition(vc, k, j) ? "True " : "False");
+			printf("\n");
+		}
+		printf("\n");
+			
+		for (j = 0; j < 7; j++)
+		{
+			for (k = 0; k < 4*4*4; k++)
+			{
+				VariableCondition_ValueIndex	valIndex;
+			
+				valIndex = VariableCondition_GetValueIndex(vc, k, j);
+				if (valIndex != (unsigned)-1)
+					printf("%03u ", valIndex);
+				else
+					printf("XXX ");
+			}
+			printf("\n");
+		}
+		printf("\n");
+	}
+	
+	Stg_Class_Delete(vc);
+		
+	Stg_Class_Delete(variable_Register);
+	for (i = 0; i < 7; i++)
+	{
+		Stg_Class_Delete(var[i]);
+		if (array[i]) Memory_Free(array[i]);
+	}
+	Stg_Class_Delete(conFunc_Register);
+	Stg_Class_Delete(quadCF);
+	Stg_Class_Delete(dictionary);
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,391 @@
+Variable_Register (ptr): 0x805a7a0
+	count: 5
+	_size: 8
+	_delta: 8
+	_variable (ptr): 0x805ae18
+Stg_Component (ptr): 0x805ae48
+Stg_Object (ptr): 0x805ae48
+	Stg_Class (ptr): 0x805ae48
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: Scalar
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Scalar-Construct
+	build function name: Scalar-Build
+	initialise function name: Scalar-Initialise
+	execute function name: Scalar-Execute
+	destroy function name: Scalar-Destroy
+Variable (ptr): (0x805ae48)
+	offsetCount: 1
+	offsets (ptr): 0x805acd0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805ac48
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805b318
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c010
+		dataSizes[0]: 1
+	components (ptr): 0x805b328
+		components[0] (ptr): (nil)
+	structSize: 1
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ac30
+	arrayPtrPtr (ptr): 0xbfb0149c
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Component (ptr): 0x805b338
+Stg_Object (ptr): 0x805b338
+	Stg_Class (ptr): 0x805b338
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: Three
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Three-Construct
+	build function name: Three-Build
+	initialise function name: Three-Initialise
+	execute function name: Three-Execute
+	destroy function name: Three-Destroy
+Variable (ptr): (0x805b338)
+	offsetCount: 1
+	offsets (ptr): 0x805b628
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b638
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805b648
+		dataTypeCounts[0]: 3
+	dataSizes (ptr): 0x805c020
+		dataSizes[0]: 3
+	components (ptr): 0x805b658
+		components[0] (ptr): 0x805b670
+		components[0]: a
+	structSize: 3
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfb01498
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Component (ptr): 0x805b670
+Stg_Object (ptr): 0x805b670
+	Stg_Class (ptr): 0x805b670
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: a
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: a-Construct
+	build function name: a-Build
+	initialise function name: a-Initialise
+	execute function name: a-Execute
+	destroy function name: a-Destroy
+Variable (ptr): (0x805b670)
+	offsetCount: 1
+	offsets (ptr): 0x805b958
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b968
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805b978
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c030
+		dataSizes[0]: 1
+	components (ptr): 0x805b988
+		components[0] (ptr): (nil)
+	structSize: 3
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfb01498
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Component (ptr): 0x805b998
+Stg_Object (ptr): 0x805b998
+	Stg_Class (ptr): 0x805b998
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: b
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: b-Construct
+	build function name: b-Build
+	initialise function name: b-Initialise
+	execute function name: b-Execute
+	destroy function name: b-Destroy
+Variable (ptr): (0x805b998)
+	offsetCount: 1
+	offsets (ptr): 0x805bc80
+		offsets[0]: 1
+	dataTypes (ptr): 0x805bc90
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805bca0
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c040
+		dataSizes[0]: 1
+	components (ptr): 0x805bcb0
+		components[0] (ptr): (nil)
+	structSize: 3
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfb01498
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Component (ptr): 0x805bcc0
+Stg_Object (ptr): 0x805bcc0
+	Stg_Class (ptr): 0x805bcc0
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7ed84a0
+		_print (func ptr): 0xb7ed8538
+		_copy (func ptr): 0xb7ed8921
+	name: c
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7ed7986
+	_construct (func ptr): 0xb7ed95c2
+	_build (func ptr): 0xb7ed90a2
+	_initialise (func ptr): 0xb7ed95b8
+	_execute (func ptr): 0xb7ed95bd
+	_destroy (func ptr): 0xb7ed9b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: c-Construct
+	build function name: c-Build
+	initialise function name: c-Initialise
+	execute function name: c-Execute
+	destroy function name: c-Destroy
+Variable (ptr): (0x805bcc0)
+	offsetCount: 1
+	offsets (ptr): 0x805bfa8
+		offsets[0]: 2
+	dataTypes (ptr): 0x805bfb8
+		dataTypes[0]: 1
+	dataTypeCounts (ptr): 0x805bfc8
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c050
+		dataSizes[0]: 1
+	components (ptr): 0x805bfd8
+		components[0] (ptr): (nil)
+	structSize: 3
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfb01498
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfb01494
+	allocateSelf = False
+Stg_Class (ptr): 0x805a7a0
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: Variable_Register
+	_delete (func ptr): 0xb7eda561
+	_print (func ptr): 0xb7eda5a1
+	_copy (func ptr): 0xb7eda6ca
+Setting value 85
+~~~Scalar~~~
+i=0: 1 1 1 1 1
+i=1: 1 1 1 1 1
+i=2: 1 1 1 1 1
+i=3: 1 1 1 1 1
+i=4: 1 1 1 1 1
+i=5: 1 1 1 1 1
+i=6: 1 1 1 1 1
+i=7: 1 1 1 1 1
+i=8: 1 1 1 1 1
+i=9: 1 1 1 1 1
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK
+Setting value -86
+~~~Scalar~~~
+i=0: 1 1 1 1 1
+i=1: 1 1 1 1 1
+i=2: 1 1 1 1 1
+i=3: 1 1 1 1 1
+i=4: 1 1 1 1 1
+i=5: 1 1 1 1 1
+i=6: 1 1 1 1 1
+i=7: 1 1 1 1 1
+i=8: 1 1 1 1 1
+i=9: 1 1 1 1 1
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testVariable-Char " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Char.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,209 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+** 	Tests the Char macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testVariable-Char.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef char Triple[3];
+
+		char* array;
+		Triple* structArray;
+		Index length = 10;
+
+		/* List of values to test the variable with.
+		 * Values to test are hex 5's and a's because they are a series of 0101 and 1010 respectively so they test
+		 * each bit in memory to read/set.
+		 */
+		long int testValues[] = { 0x55, 0xaa };
+		
+		Index testValueCount = 2;
+		Index test_I;
+		long int testValue;
+
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+
+		Variable_Register* reg;
+
+		int i, j;
+
+		array = Memory_Alloc_Array( char, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Char,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Char,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		Print( reg, stream );
+
+		for ( test_I = 0; test_I < testValueCount; ++test_I ) {	
+
+			testValue = testValues[test_I];
+
+			Journal_Printf( stream, "Setting value %d\n", (signed char)(char)testValue );
+
+			for ( i = 0; i < length; ++i ) {
+				Variable_SetValueChar( var, i, testValue );
+
+				Variable_SetValueAtChar( vec, i, 0, testValue );
+				Variable_SetValueAtChar( vec, i, 1, testValue );
+				Variable_SetValueAtChar( vec, i, 2, testValue );
+			}
+
+			Journal_Printf( stream, "~~~Scalar~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "i=%d: %d %d %d %d %d\n",
+						i,
+						Variable_GetValueChar( var, i ) == (char)(char)testValue,
+						Variable_GetValueCharAsShort( var, i ) == (short)(char)testValue,
+						Variable_GetValueCharAsInt( var, i ) == (int)(char)testValue,
+						Variable_GetValueCharAsFloat( var, i ) == (float)(char)testValue,
+						Variable_GetValueCharAsDouble( var, i ) == (double)(char)testValue );
+			}
+
+			Journal_Printf( stream, "~~~Vector~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "a, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtChar( vec, i, 0 ) == (char)(char)testValue,
+						Variable_GetValueAtCharAsShort( vec, i, 0 ) == (short)(char)testValue,
+						Variable_GetValueAtCharAsInt( vec, i, 0 ) == (int)(char)testValue,
+						Variable_GetValueAtCharAsFloat( vec, i, 0 ) == (float)(char)testValue,
+						Variable_GetValueAtCharAsDouble( vec, i, 0 ) == (double)(char)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtChar( vec, i, 0 ) == &structArray[i][0] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "b, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtChar( vec, i, 1 ) == (char)(char)testValue,
+						Variable_GetValueAtCharAsShort( vec, i, 1 ) == (short)(char)testValue,
+						Variable_GetValueAtCharAsInt( vec, i, 1 ) == (int)(char)testValue,
+						Variable_GetValueAtCharAsFloat( vec, i, 1 ) == (float)(char)testValue,
+						Variable_GetValueAtCharAsDouble( vec, i, 1 ) == (double)(char)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtChar( vec, i, 1 ) == &structArray[i][1] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "c, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtChar( vec, i, 2 ) == (char)(char)testValue,
+						Variable_GetValueAtCharAsShort( vec, i, 2 ) == (short)(char)testValue,
+						Variable_GetValueAtCharAsInt( vec, i, 2 ) == (int)(char)testValue,
+						Variable_GetValueAtCharAsFloat( vec, i, 2 ) == (float)(char)testValue,
+						Variable_GetValueAtCharAsDouble( vec, i, 2 ) == (double)(char)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtChar( vec, i, 2 ) == &structArray[i][2] ) ? "OK" : "FAILED" );
+
+			}
+
+			Journal_Printf( stream, "~~~Vector: Sub-Variable~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				for ( j = 0; j < 3; ++j ) {
+					Journal_Printf( stream, "j=%d, i=%d: %s\n",
+						j,
+						i,
+						( _Variable_GetStructPtr( vecVar[j], i ) == &structArray[i][j] ) ? "OK" : "FAIL" );
+				}
+			}
+
+			
+		}
+	
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,391 @@
+Variable_Register (ptr): 0x805b7a0
+	count: 5
+	_size: 8
+	_delta: 8
+	_variable (ptr): 0x805bf48
+Stg_Component (ptr): 0x805bf78
+Stg_Object (ptr): 0x805bf78
+	Stg_Class (ptr): 0x805bf78
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: Scalar
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Scalar-Construct
+	build function name: Scalar-Build
+	initialise function name: Scalar-Initialise
+	execute function name: Scalar-Execute
+	destroy function name: Scalar-Destroy
+Variable (ptr): (0x805bf78)
+	offsetCount: 1
+	offsets (ptr): 0x805bcd0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805bc48
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805c430
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805d128
+		dataSizes[0]: 8
+	components (ptr): 0x805c440
+		components[0] (ptr): (nil)
+	structSize: 8
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805bde8
+	arrayPtrPtr (ptr): 0xbfcdcdec
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Component (ptr): 0x805c450
+Stg_Object (ptr): 0x805c450
+	Stg_Class (ptr): 0x805c450
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: Three
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Three-Construct
+	build function name: Three-Build
+	initialise function name: Three-Initialise
+	execute function name: Three-Execute
+	destroy function name: Three-Destroy
+Variable (ptr): (0x805c450)
+	offsetCount: 1
+	offsets (ptr): 0x805c740
+		offsets[0]: 0
+	dataTypes (ptr): 0x805c750
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805c760
+		dataTypeCounts[0]: 3
+	dataSizes (ptr): 0x805d138
+		dataSizes[0]: 24
+	components (ptr): 0x805c770
+		components[0] (ptr): 0x805c788
+		components[0]: a
+	structSize: 24
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805be48
+	arrayPtrPtr (ptr): 0xbfcdcde8
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Component (ptr): 0x805c788
+Stg_Object (ptr): 0x805c788
+	Stg_Class (ptr): 0x805c788
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: a
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: a-Construct
+	build function name: a-Build
+	initialise function name: a-Initialise
+	execute function name: a-Execute
+	destroy function name: a-Destroy
+Variable (ptr): (0x805c788)
+	offsetCount: 1
+	offsets (ptr): 0x805ca70
+		offsets[0]: 0
+	dataTypes (ptr): 0x805ca80
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805ca90
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805d148
+		dataSizes[0]: 8
+	components (ptr): 0x805caa0
+		components[0] (ptr): (nil)
+	structSize: 24
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805be48
+	arrayPtrPtr (ptr): 0xbfcdcde8
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Component (ptr): 0x805cab0
+Stg_Object (ptr): 0x805cab0
+	Stg_Class (ptr): 0x805cab0
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: b
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: b-Construct
+	build function name: b-Build
+	initialise function name: b-Initialise
+	execute function name: b-Execute
+	destroy function name: b-Destroy
+Variable (ptr): (0x805cab0)
+	offsetCount: 1
+	offsets (ptr): 0x805cd98
+		offsets[0]: 8
+	dataTypes (ptr): 0x805cda8
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805cdb8
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805d158
+		dataSizes[0]: 8
+	components (ptr): 0x805cdc8
+		components[0] (ptr): (nil)
+	structSize: 24
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805be48
+	arrayPtrPtr (ptr): 0xbfcdcde8
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Component (ptr): 0x805cdd8
+Stg_Object (ptr): 0x805cdd8
+	Stg_Class (ptr): 0x805cdd8
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7fb44a0
+		_print (func ptr): 0xb7fb4538
+		_copy (func ptr): 0xb7fb4921
+	name: c
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7fb3986
+	_construct (func ptr): 0xb7fb55c2
+	_build (func ptr): 0xb7fb50a2
+	_initialise (func ptr): 0xb7fb55b8
+	_execute (func ptr): 0xb7fb55bd
+	_destroy (func ptr): 0xb7fb5b1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: c-Construct
+	build function name: c-Build
+	initialise function name: c-Initialise
+	execute function name: c-Execute
+	destroy function name: c-Destroy
+Variable (ptr): (0x805cdd8)
+	offsetCount: 1
+	offsets (ptr): 0x805d0c0
+		offsets[0]: 16
+	dataTypes (ptr): 0x805d0d0
+		dataTypes[0]: 5
+	dataTypeCounts (ptr): 0x805d0e0
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805d168
+		dataSizes[0]: 8
+	components (ptr): 0x805d0f0
+		components[0] (ptr): (nil)
+	structSize: 24
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805be48
+	arrayPtrPtr (ptr): 0xbfcdcde8
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfcdcde4
+	allocateSelf = False
+Stg_Class (ptr): 0x805b7a0
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: Variable_Register
+	_delete (func ptr): 0xb7fb6561
+	_print (func ptr): 0xb7fb65a1
+	_copy (func ptr): 0xb7fb66ca
+Setting value 123456789.000000
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK
+Setting value 0.987654
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testVariable-Double " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Double.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,204 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+** 	Tests the Double macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testVariable-Double.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef double Triple[3];
+
+		double* array;
+		Triple* structArray;
+		Index length = 10;
+
+		double testValues[] = { 123456789.0, 0.987654321 };
+		Index testValueCount = 2;
+		Index test_I;
+		double testValue;
+
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+
+		Variable_Register* reg;
+
+		int i, j;
+
+		array = Memory_Alloc_Array( double, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Double,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Double,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		Print( reg, stream );
+
+		for ( test_I = 0; test_I < testValueCount; ++test_I ) {	
+
+			testValue = testValues[test_I];
+
+			Journal_Printf( stream, "Setting value %lf\n", (double)(double)testValue );
+
+			for ( i = 0; i < length; ++i ) {
+				Variable_SetValueDouble( var, i, testValue );
+
+				Variable_SetValueAtDouble( vec, i, 0, testValue );
+				Variable_SetValueAtDouble( vec, i, 1, testValue );
+				Variable_SetValueAtDouble( vec, i, 2, testValue );
+			}
+
+			Journal_Printf( stream, "~~~Scalar~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "i=%d: %d %d %d %d %d \n",
+						i,
+						Variable_GetValueDouble( var, i ) == (double)(double)testValue,
+						Variable_GetValueDoubleAsChar( var, i ) == (char)(double)testValue,
+						Variable_GetValueDoubleAsShort( var, i ) == (short)(double)testValue,
+						Variable_GetValueDoubleAsInt( var, i ) == (int)(double)testValue,
+						Variable_GetValueDoubleAsFloat( var, i ) == (float)(double)testValue );
+			}
+
+			Journal_Printf( stream, "~~~Vector~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "a, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtDouble( vec, i, 0 ) == (double)(double)testValue,
+						Variable_GetValueAtDoubleAsChar( vec, i, 0 ) == (char)(double)testValue,
+						Variable_GetValueAtDoubleAsShort( vec, i, 0 ) == (short)(double)testValue,
+						Variable_GetValueAtDoubleAsInt( vec, i, 0 ) == (int)(double)testValue,
+						Variable_GetValueAtDoubleAsFloat( vec, i, 0 ) == (float)(double)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtDouble( vec, i, 0 ) == &structArray[i][0] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "b, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtDouble( vec, i, 1 ) == (double)(double)testValue,
+						Variable_GetValueAtDoubleAsChar( vec, i, 1 ) == (char)(double)testValue,
+						Variable_GetValueAtDoubleAsShort( vec, i, 1 ) == (short)(double)testValue,
+						Variable_GetValueAtDoubleAsInt( vec, i, 1 ) == (int)(double)testValue,
+						Variable_GetValueAtDoubleAsFloat( vec, i, 1 ) == (float)(double)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtDouble( vec, i, 1 ) == &structArray[i][1] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "c, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtDouble( vec, i, 2 ) == (double)(double)testValue,
+						Variable_GetValueAtDoubleAsChar( vec, i, 2 ) == (char)(double)testValue,
+						Variable_GetValueAtDoubleAsShort( vec, i, 2 ) == (short)(double)testValue,
+						Variable_GetValueAtDoubleAsInt( vec, i, 2 ) == (int)(double)testValue,
+						Variable_GetValueAtDoubleAsFloat( vec, i, 2 ) == (float)(double)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtDouble( vec, i, 2 ) == &structArray[i][2] ) ? "OK" : "FAILED" );
+
+			}
+
+			Journal_Printf( stream, "~~~Vector: Sub-Variable~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				for ( j = 0; j < 3; ++j ) {
+					Journal_Printf( stream, "j=%d, i=%d: %s\n",
+						j,
+						i,
+						( _Variable_GetStructPtr( vecVar[j], i ) == &structArray[i][j] ) ? "OK" : "FAIL" );
+				}
+			}
+
+			
+		}
+	
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.expected	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,391 @@
+Variable_Register (ptr): 0x805ae70
+	count: 5
+	_size: 8
+	_delta: 8
+	_variable (ptr): 0x805aea8
+Stg_Component (ptr): 0x805aed8
+Stg_Object (ptr): 0x805aed8
+	Stg_Class (ptr): 0x805aed8
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: Scalar
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Scalar-Construct
+	build function name: Scalar-Build
+	initialise function name: Scalar-Initialise
+	execute function name: Scalar-Execute
+	destroy function name: Scalar-Destroy
+Variable (ptr): (0x805aed8)
+	offsetCount: 1
+	offsets (ptr): 0x805acd0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805ac48
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805b390
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c088
+		dataSizes[0]: 4
+	components (ptr): 0x805b3a0
+		components[0] (ptr): (nil)
+	structSize: 4
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805a7a0
+	arrayPtrPtr (ptr): 0xbfe4822c
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Component (ptr): 0x805b3b0
+Stg_Object (ptr): 0x805b3b0
+	Stg_Class (ptr): 0x805b3b0
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: Three
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: Three-Construct
+	build function name: Three-Build
+	initialise function name: Three-Initialise
+	execute function name: Three-Execute
+	destroy function name: Three-Destroy
+Variable (ptr): (0x805b3b0)
+	offsetCount: 1
+	offsets (ptr): 0x805b6a0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b6b0
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805b6c0
+		dataTypeCounts[0]: 3
+	dataSizes (ptr): 0x805c098
+		dataSizes[0]: 12
+	components (ptr): 0x805b6d0
+		components[0] (ptr): 0x805b6e8
+		components[0]: a
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfe48228
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Component (ptr): 0x805b6e8
+Stg_Object (ptr): 0x805b6e8
+	Stg_Class (ptr): 0x805b6e8
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: a
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: a-Construct
+	build function name: a-Build
+	initialise function name: a-Initialise
+	execute function name: a-Execute
+	destroy function name: a-Destroy
+Variable (ptr): (0x805b6e8)
+	offsetCount: 1
+	offsets (ptr): 0x805b9d0
+		offsets[0]: 0
+	dataTypes (ptr): 0x805b9e0
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805b9f0
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c0a8
+		dataSizes[0]: 4
+	components (ptr): 0x805ba00
+		components[0] (ptr): (nil)
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfe48228
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Component (ptr): 0x805ba10
+Stg_Object (ptr): 0x805ba10
+	Stg_Class (ptr): 0x805ba10
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: b
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: b-Construct
+	build function name: b-Build
+	initialise function name: b-Initialise
+	execute function name: b-Execute
+	destroy function name: b-Destroy
+Variable (ptr): (0x805ba10)
+	offsetCount: 1
+	offsets (ptr): 0x805bcf8
+		offsets[0]: 4
+	dataTypes (ptr): 0x805bd08
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805bd18
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c0b8
+		dataSizes[0]: 4
+	components (ptr): 0x805bd28
+		components[0] (ptr): (nil)
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfe48228
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Component (ptr): 0x805bd38
+Stg_Object (ptr): 0x805bd38
+	Stg_Class (ptr): 0x805bd38
+		sizeOfSelf: 152
+		_deleteSelf: Yes
+		type: Variable
+		_delete (func ptr): 0xb7f1d4a0
+		_print (func ptr): 0xb7f1d538
+		_copy (func ptr): 0xb7f1d921
+	name: c
+	nameAllocationType: NON_GLOBAL
+	_defaultConstructor (func ptr): 0xb7f1c986
+	_construct (func ptr): 0xb7f1e5c2
+	_build (func ptr): 0xb7f1e0a2
+	_initialise (func ptr): 0xb7f1e5b8
+	_execute (func ptr): 0xb7f1e5bd
+	_destroy (func ptr): 0xb7f1eb1a
+	isConstructed: True
+	isBuilt: True
+	isInitialised: False
+	hasExecuted: False
+	isDestroyed: False
+	constructor function name: c-Construct
+	build function name: c-Build
+	initialise function name: c-Initialise
+	execute function name: c-Execute
+	destroy function name: c-Destroy
+Variable (ptr): (0x805bd38)
+	offsetCount: 1
+	offsets (ptr): 0x805c020
+		offsets[0]: 8
+	dataTypes (ptr): 0x805c030
+		dataTypes[0]: 4
+	dataTypeCounts (ptr): 0x805c040
+		dataTypeCounts[0]: 1
+	dataSizes (ptr): 0x805c0c8
+		dataSizes[0]: 4
+	components (ptr): 0x805c050
+		components[0] (ptr): (nil)
+	structSize: 12
+	structSizePtr (ptr): (nil)
+	arrayPtr (ptr): 0x805ade8
+	arrayPtrPtr (ptr): 0xbfe48228
+	arraySize: 10
+	arraySizePtr (ptr): 0xbfe48224
+	allocateSelf = False
+Stg_Class (ptr): 0x805ae70
+	sizeOfSelf: 40
+	_deleteSelf: Yes
+	type: Variable_Register
+	_delete (func ptr): 0xb7f1f561
+	_print (func ptr): 0xb7f1f5a1
+	_copy (func ptr): 0xb7f1f6ca
+Setting value 123456792.000000
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK
+Setting value 0.987654
+~~~Scalar~~~
+i=0: 1 1 1 1 1 
+i=1: 1 1 1 1 1 
+i=2: 1 1 1 1 1 
+i=3: 1 1 1 1 1 
+i=4: 1 1 1 1 1 
+i=5: 1 1 1 1 1 
+i=6: 1 1 1 1 1 
+i=7: 1 1 1 1 1 
+i=8: 1 1 1 1 1 
+i=9: 1 1 1 1 1 
+~~~Vector~~~
+a, i=0: 1 1 1 1 1 ptr test OK
+b, i=0: 1 1 1 1 1 ptr test OK
+c, i=0: 1 1 1 1 1 ptr test OK
+a, i=1: 1 1 1 1 1 ptr test OK
+b, i=1: 1 1 1 1 1 ptr test OK
+c, i=1: 1 1 1 1 1 ptr test OK
+a, i=2: 1 1 1 1 1 ptr test OK
+b, i=2: 1 1 1 1 1 ptr test OK
+c, i=2: 1 1 1 1 1 ptr test OK
+a, i=3: 1 1 1 1 1 ptr test OK
+b, i=3: 1 1 1 1 1 ptr test OK
+c, i=3: 1 1 1 1 1 ptr test OK
+a, i=4: 1 1 1 1 1 ptr test OK
+b, i=4: 1 1 1 1 1 ptr test OK
+c, i=4: 1 1 1 1 1 ptr test OK
+a, i=5: 1 1 1 1 1 ptr test OK
+b, i=5: 1 1 1 1 1 ptr test OK
+c, i=5: 1 1 1 1 1 ptr test OK
+a, i=6: 1 1 1 1 1 ptr test OK
+b, i=6: 1 1 1 1 1 ptr test OK
+c, i=6: 1 1 1 1 1 ptr test OK
+a, i=7: 1 1 1 1 1 ptr test OK
+b, i=7: 1 1 1 1 1 ptr test OK
+c, i=7: 1 1 1 1 1 ptr test OK
+a, i=8: 1 1 1 1 1 ptr test OK
+b, i=8: 1 1 1 1 1 ptr test OK
+c, i=8: 1 1 1 1 1 ptr test OK
+a, i=9: 1 1 1 1 1 ptr test OK
+b, i=9: 1 1 1 1 1 ptr test OK
+c, i=9: 1 1 1 1 1 ptr test OK
+~~~Vector: Sub-Variable~~~
+j=0, i=0: OK
+j=1, i=0: OK
+j=2, i=0: OK
+j=0, i=1: OK
+j=1, i=1: OK
+j=2, i=1: OK
+j=0, i=2: OK
+j=1, i=2: OK
+j=2, i=2: OK
+j=0, i=3: OK
+j=1, i=3: OK
+j=2, i=3: OK
+j=0, i=4: OK
+j=1, i=4: OK
+j=2, i=4: OK
+j=0, i=5: OK
+j=1, i=5: OK
+j=2, i=5: OK
+j=0, i=6: OK
+j=1, i=6: OK
+j=2, i=6: OK
+j=0, i=7: OK
+j=1, i=7: OK
+j=2, i=7: OK
+j=0, i=8: OK
+j=1, i=8: OK
+j=2, i=8: OK
+j=0, i=9: OK
+j=1, i=9: OK
+j=2, i=9: OK

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+TEST_SCRIPT=./VMake/executableTester.sh
+until test -r ${TEST_SCRIPT} ; do
+        TEST_SCRIPT=../${TEST_SCRIPT}
+done
+. ${TEST_SCRIPT}
+
+runAndHandleSystemTest "testVariable-Float " "$0" "$@"


Property changes on: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.0of1.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.c
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.c	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Float.c	2008-10-03 17:11:55 UTC (rev 12991)
@@ -0,0 +1,204 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+**	Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+**	Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+**	Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+**	Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+**	Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+**	Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+**
+** Role:
+** 	Tests the Float macros of Variable. Will test a single scalar, vector and each scalar created from the vector.
+**
+** $Id: testVariable-Float.c 2136 2004-09-30 02:47:13Z PatrickSunter $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Foundation/Foundation.h"
+#include "Base/IO/IO.h"
+#include "Base/Container/Container.h"
+#include "Base/Automation/Automation.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+
+int main( int argc, char *argv[] ) {
+	int		rank;
+	int		procCount;
+	int		procToWatch;
+	Stream*		stream;
+	
+	/* Initialise MPI, get world info */
+	MPI_Init( &argc, &argv );
+	MPI_Comm_size( MPI_COMM_WORLD, &procCount );
+	MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+	
+	BaseFoundation_Init( &argc, &argv );
+	BaseIO_Init( &argc, &argv );
+	BaseContainer_Init( &argc, &argv );
+	BaseAutomation_Init( &argc, &argv );
+
+	stream = Journal_Register( Info_Type, "testVariable" );
+	
+	if( argc >= 2 ) {
+		procToWatch = atoi( argv[1] );
+	}
+	else {
+		procToWatch = 0;
+	}
+	if( rank == procToWatch ) {
+		typedef float Triple[3];
+
+		float* array;
+		Triple* structArray;
+		Index length = 10;
+
+		float testValues[] = { 123456789.0, 0.987654321 };
+		Index testValueCount = 2;
+		Index test_I;
+		float testValue;
+
+		Variable* var;
+		Variable* vec;
+		Variable* vecVar[3];
+
+		Variable_Register* reg;
+
+		int i, j;
+
+		array = Memory_Alloc_Array( float, length, "test" );
+		structArray = Memory_Alloc_Array( Triple, length, "test" );
+
+		reg = Variable_Register_New();
+
+		var = Variable_NewScalar(
+			"Scalar",
+			Variable_DataType_Float,
+			&length,
+			(void**)&array,
+			reg );
+
+		vec = Variable_NewVector(
+			"Three",
+			Variable_DataType_Float,
+			3,
+			&length,
+			(void**)&structArray,
+			reg,
+			"a",
+			"b",
+			"c" );
+		vecVar[0] = Variable_Register_GetByName( reg, "a" );
+		vecVar[1] = Variable_Register_GetByName( reg, "b" );
+		vecVar[2] = Variable_Register_GetByName( reg, "c" );
+
+		Variable_Register_BuildAll( reg );
+
+		Print( reg, stream );
+
+		for ( test_I = 0; test_I < testValueCount; ++test_I ) {	
+
+			testValue = testValues[test_I];
+
+			Journal_Printf( stream, "Setting value %f\n", testValue );
+
+			for ( i = 0; i < length; ++i ) {
+				Variable_SetValueFloat( var, i, testValue );
+
+				Variable_SetValueAtFloat( vec, i, 0, testValue );
+				Variable_SetValueAtFloat( vec, i, 1, testValue );
+				Variable_SetValueAtFloat( vec, i, 2, testValue );
+			}
+			
+			Journal_Printf( stream, "~~~Scalar~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "i=%d: %d %d %d %d %d \n",
+						i,
+						Variable_GetValueFloat( var, i ) == (float)(float)testValue,
+						Variable_GetValueFloatAsChar( var, i ) == (float)(char)testValue,
+						Variable_GetValueFloatAsShort( var, i ) == (float)(short)testValue,
+						Variable_GetValueFloatAsInt( var, i ) == (float)(int)testValue,
+						Variable_GetValueFloatAsDouble( var, i ) == (double)(float)testValue );
+			}
+
+			Journal_Printf( stream, "~~~Vector~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				Journal_Printf( stream, "a, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtFloat( vec, i, 0 ) == (float)(float)testValue,
+						Variable_GetValueAtFloatAsChar( vec, i, 0 ) == (char)(float)testValue,
+						Variable_GetValueAtFloatAsShort( vec, i, 0 ) == (short)(float)testValue,
+						Variable_GetValueAtFloatAsInt( vec, i, 0 ) == (int)(float)testValue,
+						Variable_GetValueAtFloatAsDouble( vec, i, 0 ) == (double)(float)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtFloat( vec, i, 0 ) == &structArray[i][0] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "b, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtFloat( vec, i, 1 ) == (float)(float)testValue,
+						Variable_GetValueAtFloatAsChar( vec, i, 1 ) == (char)(float)testValue,
+						Variable_GetValueAtFloatAsShort( vec, i, 1 ) == (short)(float)testValue,
+						Variable_GetValueAtFloatAsInt( vec, i, 1 ) == (int)(float)testValue,
+						Variable_GetValueAtFloatAsDouble( vec, i, 1 ) == (double)(float)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtFloat( vec, i, 1 ) == &structArray[i][1] ) ? "OK" : "FAILED" );
+
+				Journal_Printf( stream, "c, i=%d: %d %d %d %d %d ",
+						i,
+						Variable_GetValueAtFloat( vec, i, 2 ) == (float)(float)testValue,
+						Variable_GetValueAtFloatAsChar( vec, i, 2 ) == (char)(float)testValue,
+						Variable_GetValueAtFloatAsShort( vec, i, 2 ) == (short)(float)testValue,
+						Variable_GetValueAtFloatAsInt( vec, i, 2 ) == (int)(float)testValue,
+						Variable_GetValueAtFloatAsDouble( vec, i, 2 ) == (double)(float)testValue );
+				Journal_Printf( stream, "ptr test %s\n",
+						( Variable_GetPtrAtFloat( vec, i, 2 ) == &structArray[i][2] ) ? "OK" : "FAILED" );
+
+			}
+
+			Journal_Printf( stream, "~~~Vector: Sub-Variable~~~\n" );
+			for ( i = 0; i < length; ++i ) {
+				for ( j = 0; j < 3; ++j ) {
+					Journal_Printf( stream, "j=%d, i=%d: %s\n",
+						j,
+						i,
+						( _Variable_GetStructPtr( vecVar[j], i ) == &structArray[i][j] ) ? "OK" : "FAIL" );
+				}
+			}
+
+			
+		}
+	
+	}
+	
+	BaseAutomation_Finalise();
+	BaseContainer_Finalise();
+	BaseIO_Finalise();
+	BaseFoundation_Finalise();
+
+	
+	/* Close off MPI */
+	MPI_Finalize();
+	
+	return 0; /* success */
+}

Added: long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.expected
===================================================================
--- long/3D/SNAC/trunk/StGermain/Base/Automation/tests/testVariable-Int.0of1.expected	                        (rev 0)
+++ long/3D/SNAC/trunk/StGermain/Base/Automation/tests/te