You can subscribe to this list here.
2003 |
Jan
|
Feb
(5) |
Mar
(86) |
Apr
(3) |
May
(5) |
Jun
(18) |
Jul
|
Aug
(44) |
Sep
(27) |
Oct
(17) |
Nov
(1) |
Dec
(70) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(14) |
Feb
(33) |
Mar
(61) |
Apr
(52) |
May
(24) |
Jun
(52) |
Jul
(28) |
Aug
(73) |
Sep
(47) |
Oct
(29) |
Nov
(162) |
Dec
(51) |
2005 |
Jan
(44) |
Feb
(42) |
Mar
(32) |
Apr
(12) |
May
(55) |
Jun
(116) |
Jul
(10) |
Aug
(39) |
Sep
(39) |
Oct
(26) |
Nov
(58) |
Dec
(122) |
2006 |
Jan
(46) |
Feb
(38) |
Mar
(78) |
Apr
(71) |
May
(44) |
Jun
(25) |
Jul
(55) |
Aug
(53) |
Sep
(54) |
Oct
(55) |
Nov
(87) |
Dec
(33) |
2007 |
Jan
(13) |
Feb
(32) |
Mar
(33) |
Apr
(49) |
May
(100) |
Jun
(51) |
Jul
(29) |
Aug
(63) |
Sep
(14) |
Oct
(90) |
Nov
(43) |
Dec
(25) |
2008 |
Jan
(22) |
Feb
(31) |
Mar
(44) |
Apr
(23) |
May
(65) |
Jun
(30) |
Jul
(41) |
Aug
(31) |
Sep
(18) |
Oct
(41) |
Nov
(26) |
Dec
|
2009 |
Jan
(18) |
Feb
(23) |
Mar
(21) |
Apr
(28) |
May
(3) |
Jun
(18) |
Jul
(10) |
Aug
(9) |
Sep
|
Oct
(9) |
Nov
(3) |
Dec
(5) |
2010 |
Jan
(34) |
Feb
(40) |
Mar
(17) |
Apr
(6) |
May
(4) |
Jun
(5) |
Jul
(49) |
Aug
(34) |
Sep
(10) |
Oct
(3) |
Nov
(10) |
Dec
(16) |
2011 |
Jan
(22) |
Feb
(3) |
Mar
(5) |
Apr
(36) |
May
(39) |
Jun
(6) |
Jul
(1) |
Aug
(6) |
Sep
(9) |
Oct
(11) |
Nov
(35) |
Dec
(12) |
2012 |
Jan
(24) |
Feb
(30) |
Mar
(22) |
Apr
(20) |
May
(17) |
Jun
(21) |
Jul
(33) |
Aug
(26) |
Sep
(30) |
Oct
(21) |
Nov
(24) |
Dec
(61) |
2013 |
Jan
(44) |
Feb
(43) |
Mar
(17) |
Apr
(30) |
May
(29) |
Jun
(2) |
Jul
(17) |
Aug
(15) |
Sep
(19) |
Oct
(62) |
Nov
(25) |
Dec
(15) |
2014 |
Jan
(78) |
Feb
(40) |
Mar
(50) |
Apr
(79) |
May
(46) |
Jun
(30) |
Jul
(96) |
Aug
(82) |
Sep
(171) |
Oct
(199) |
Nov
(101) |
Dec
(158) |
2015 |
Jan
(124) |
Feb
(62) |
Mar
(102) |
Apr
(29) |
May
(83) |
Jun
(92) |
Jul
(61) |
Aug
(42) |
Sep
(43) |
Oct
(79) |
Nov
(51) |
Dec
|
From: <jr...@us...> - 2015-11-20 19:18:36
|
Revision: 5166 http://sourceforge.net/p/nscldaq/code/5166 Author: jrtomps Date: 2015-11-20 19:18:34 +0000 (Fri, 20 Nov 2015) Log Message: ----------- Fixes bug 4987. RunStateMachine -> RunstateMachine Modified Paths: -------------- trunk/main/daq/readoutgui/readoutgui_man.xml Modified: trunk/main/daq/readoutgui/readoutgui_man.xml =================================================================== --- trunk/main/daq/readoutgui/readoutgui_man.xml 2015-11-19 17:58:24 UTC (rev 5165) +++ trunk/main/daq/readoutgui/readoutgui_man.xml 2015-11-20 19:18:34 UTC (rev 5166) @@ -2928,7 +2928,7 @@ <refsynopsisdiv> <cmdsynopsis> <command> -package require RunStateMachine +package require RunstateMachine </command> </cmdsynopsis> <cmdsynopsis> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 17:58:26
|
Revision: 5165 http://sourceforge.net/p/nscldaq/code/5165 Author: ron-fox Date: 2015-11-19 17:58:24 +0000 (Thu, 19 Nov 2015) Log Message: ----------- Provide a bit more delay before requiring all transitions have fired. Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/utilities/statemanager/TestStateChangeMonitor.cpp Modified: branches/nscldaq-11.0-variablemanager/utilities/statemanager/TestStateChangeMonitor.cpp =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/statemanager/TestStateChangeMonitor.cpp 2015-11-19 15:59:14 UTC (rev 5164) +++ branches/nscldaq-11.0-variablemanager/utilities/statemanager/TestStateChangeMonitor.cpp 2015-11-19 17:58:24 UTC (rev 5165) @@ -501,7 +501,7 @@ m_pApi->set("/RunState/State", "Readying"); m_pApi->set("/RunState/State", "Ready"); - usleep(100); // Give the monitor thread time to see + usleep(500); // Give the monitor thread time to see std::string newState; // both notifications... ASSERT(api.waitTransition(newState, 1000)); // should know within a second. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 15:59:16
|
Revision: 5164 http://sourceforge.net/p/nscldaq/code/5164 Author: ron-fox Date: 2015-11-19 15:59:14 +0000 (Thu, 19 Nov 2015) Log Message: ----------- change 11.0 references to 11.1 Modified Paths: -------------- trunk/main/testBuildTarball Modified: trunk/main/testBuildTarball =================================================================== --- trunk/main/testBuildTarball 2015-11-19 15:58:35 UTC (rev 5163) +++ trunk/main/testBuildTarball 2015-11-19 15:59:14 UTC (rev 5164) @@ -1,7 +1,7 @@ #!/bin/bash -xe -rm -rf ${WORKSPACE}/11.0 +rm -rf ${WORKSPACE}/11.1 version=`grep AC_INIT configure.ac | cut -f2 -d" " | sed s/,//` @@ -10,7 +10,7 @@ tar xzf nscldaq-${version}.tar.gz cd nscldaq-${version} -./configure --prefix=${WORKSPACE}/11.0 --enable-usb --enable-sbs=/lib/modules/`uname -r`/build --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs +./configure --prefix=${WORKSPACE}/11.1 --enable-usb --enable-sbs=/lib/modules/`uname -r`/build --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs make clean all make install chmod u+x nscldaq @@ -20,4 +20,4 @@ ./nscldaq stop rm -rf nscldaq-${version} -rm -rf ${WORKSPACE}/11.0 +rm -rf ${WORKSPACE}/11.1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 15:58:38
|
Revision: 5163 http://sourceforge.net/p/nscldaq/code/5163 Author: ron-fox Date: 2015-11-19 15:58:35 +0000 (Thu, 19 Nov 2015) Log Message: ----------- change 11.0 references to 11.1 Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/testBuildTarball Modified: branches/nscldaq-11.0-variablemanager/testBuildTarball =================================================================== --- branches/nscldaq-11.0-variablemanager/testBuildTarball 2015-11-19 14:43:33 UTC (rev 5162) +++ branches/nscldaq-11.0-variablemanager/testBuildTarball 2015-11-19 15:58:35 UTC (rev 5163) @@ -1,7 +1,7 @@ #!/bin/bash -xe -rm -rf ${WORKSPACE}/11.0 +rm -rf ${WORKSPACE}/11.1 version=`grep AC_INIT configure.ac | cut -f2 -d" " | sed s/,//` @@ -10,7 +10,7 @@ tar xzf nscldaq-${version}.tar.gz cd nscldaq-${version} -./configure --prefix=${WORKSPACE}/11.0 --enable-usb --enable-sbs=/lib/modules/`uname -r`/build --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs +./configure --prefix=${WORKSPACE}/11.1 --enable-usb --enable-sbs=/lib/modules/`uname -r`/build --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs make clean all make install chmod u+x nscldaq @@ -20,4 +20,4 @@ ./nscldaq stop rm -rf nscldaq-${version} -rm -rf ${WORKSPACE}/11.0 +rm -rf ${WORKSPACE}/11.1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 14:43:36
|
Revision: 5162 http://sourceforge.net/p/nscldaq/code/5162 Author: ron-fox Date: 2015-11-19 14:43:33 +0000 (Thu, 19 Nov 2015) Log Message: ----------- Typo typo typeo -- @srdir@/ not just @srcdir@ Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/utilities/statemanager/Makefile.am Modified: branches/nscldaq-11.0-variablemanager/utilities/statemanager/Makefile.am =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/statemanager/Makefile.am 2015-11-19 14:07:37 UTC (rev 5161) +++ branches/nscldaq-11.0-variablemanager/utilities/statemanager/Makefile.am 2015-11-19 14:43:33 UTC (rev 5162) @@ -343,5 +343,5 @@ BINDIR="@bindir@" PYTHONPATH=@prefix@/pythonLibs @builddir@/stateTests DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @TCLSH_CMD@ @srcdir@/stateclient.test DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @TCLSH_CMD@ @srcdir@/statemgr.test -constraints "{oldTest newtest}" - DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @PYTHON@ @srcdir@StateClientTests.py - DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @PYTHON@ @srcdir@StateManagerTests.py \ No newline at end of file + DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @PYTHON@ @srcdir@/StateClientTests.py + DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @PYTHON@ @srcdir@/StateManagerTests.py \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 14:07:39
|
Revision: 5161 http://sourceforge.net/p/nscldaq/code/5161 Author: ron-fox Date: 2015-11-19 14:07:37 +0000 (Thu, 19 Nov 2015) Log Message: ----------- Correct dir for sbs driver build. Modified Paths: -------------- trunk/main/testBuildTarball Modified: trunk/main/testBuildTarball =================================================================== --- trunk/main/testBuildTarball 2015-11-19 14:07:02 UTC (rev 5160) +++ trunk/main/testBuildTarball 2015-11-19 14:07:37 UTC (rev 5161) @@ -10,7 +10,7 @@ tar xzf nscldaq-${version}.tar.gz cd nscldaq-${version} -./configure --prefix=${WORKSPACE}/11.0 --enable-usb --enable-sbs=/lib/modules/`uname -r` --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs +./configure --prefix=${WORKSPACE}/11.0 --enable-usb --enable-sbs=/lib/modules/`uname -r`/build --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs make clean all make install chmod u+x nscldaq This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 14:07:04
|
Revision: 5160 http://sourceforge.net/p/nscldaq/code/5160 Author: ron-fox Date: 2015-11-19 14:07:02 +0000 (Thu, 19 Nov 2015) Log Message: ----------- Correct dir for sbs driver Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/testBuildTarball Modified: branches/nscldaq-11.0-variablemanager/testBuildTarball =================================================================== --- branches/nscldaq-11.0-variablemanager/testBuildTarball 2015-11-19 13:40:03 UTC (rev 5159) +++ branches/nscldaq-11.0-variablemanager/testBuildTarball 2015-11-19 14:07:02 UTC (rev 5160) @@ -10,7 +10,7 @@ tar xzf nscldaq-${version}.tar.gz cd nscldaq-${version} -./configure --prefix=${WORKSPACE}/11.0 --enable-usb --enable-sbs=/lib/modules/`uname -r` --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs +./configure --prefix=${WORKSPACE}/11.0 --enable-usb --enable-sbs=/lib/modules/`uname -r`/build --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs make clean all make install chmod u+x nscldaq This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 13:40:06
|
Revision: 5159 http://sourceforge.net/p/nscldaq/code/5159 Author: ron-fox Date: 2015-11-19 13:40:03 +0000 (Thu, 19 Nov 2015) Log Message: ----------- Scripted tests must specify @srcdir@ Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/utilities/services/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/statemanager/Makefile.am Modified: branches/nscldaq-11.0-variablemanager/utilities/services/Makefile.am =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/services/Makefile.am 2015-11-19 12:08:05 UTC (rev 5158) +++ branches/nscldaq-11.0-variablemanager/utilities/services/Makefile.am 2015-11-19 13:40:03 UTC (rev 5159) @@ -43,7 +43,7 @@ DAQBIN=@prefix@/bin PYTHONPATH=@prefix@/pythonLibs: \ TCLLIBPATH=@prefix@/TclLibs @TCLSH@ @srcdir@/TclServices.test DAQBIN=@prefix@/bin PYTHONPATH=@prefix@/pythonLibs: \ - TCLLIBPATH=@prefix@/TclLibs @PYTHON@ apiTests.py + TCLLIBPATH=@prefix@/TclLibs @PYTHON@ @srcdir@/apiTests.py install-exec-hook: Modified: branches/nscldaq-11.0-variablemanager/utilities/statemanager/Makefile.am =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/statemanager/Makefile.am 2015-11-19 12:08:05 UTC (rev 5158) +++ branches/nscldaq-11.0-variablemanager/utilities/statemanager/Makefile.am 2015-11-19 13:40:03 UTC (rev 5159) @@ -343,5 +343,5 @@ BINDIR="@bindir@" PYTHONPATH=@prefix@/pythonLibs @builddir@/stateTests DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @TCLSH_CMD@ @srcdir@/stateclient.test DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @TCLSH_CMD@ @srcdir@/statemgr.test -constraints "{oldTest newtest}" - DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @PYTHON@ StateClientTests.py - DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @PYTHON@ StateManagerTests.py \ No newline at end of file + DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @PYTHON@ @srcdir@StateClientTests.py + DAQBIN="@bindir@" TCLLIBPATH=@prefix@/TclLibs PYTHONPATH=@prefix@/pythonLibs @PYTHON@ @srcdir@StateManagerTests.py \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 12:08:08
|
Revision: 5158 http://sourceforge.net/p/nscldaq/code/5158 Author: ron-fox Date: 2015-11-19 12:08:05 +0000 (Thu, 19 Nov 2015) Log Message: ----------- Did not request full build. Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/testBuildTarball Modified: branches/nscldaq-11.0-variablemanager/testBuildTarball =================================================================== --- branches/nscldaq-11.0-variablemanager/testBuildTarball 2015-11-19 12:07:32 UTC (rev 5157) +++ branches/nscldaq-11.0-variablemanager/testBuildTarball 2015-11-19 12:08:05 UTC (rev 5158) @@ -10,7 +10,7 @@ tar xzf nscldaq-${version}.tar.gz cd nscldaq-${version} -./configure --prefix=${WORKSPACE}/11.0 --enable-usb +./configure --prefix=${WORKSPACE}/11.0 --enable-usb --enable-sbs=/lib/modules/`uname -r` --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs make clean all make install chmod u+x nscldaq This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 12:07:34
|
Revision: 5157 http://sourceforge.net/p/nscldaq/code/5157 Author: ron-fox Date: 2015-11-19 12:07:32 +0000 (Thu, 19 Nov 2015) Log Message: ----------- Did not request the full build. Modified Paths: -------------- trunk/main/testBuildTarball Modified: trunk/main/testBuildTarball =================================================================== --- trunk/main/testBuildTarball 2015-11-19 11:58:05 UTC (rev 5156) +++ trunk/main/testBuildTarball 2015-11-19 12:07:32 UTC (rev 5157) @@ -10,7 +10,7 @@ tar xzf nscldaq-${version}.tar.gz cd nscldaq-${version} -./configure --prefix=${WORKSPACE}/11.0 --enable-usb +./configure --prefix=${WORKSPACE}/11.0 --enable-usb --enable-sbs=/lib/modules/`uname -r` --enable-epics-tools=yes --with-epics-rootdir=/usr/lib/epics --enable-docs make clean all make install chmod u+x nscldaq This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-19 11:58:08
|
Revision: 5156 http://sourceforge.net/p/nscldaq/code/5156 Author: ron-fox Date: 2015-11-19 11:58:05 +0000 (Thu, 19 Nov 2015) Log Message: ----------- Explicitly run tests from @srcdr@ so out of tree builds find them. Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/utilities/expEditor/Makefile.am Modified: branches/nscldaq-11.0-variablemanager/utilities/expEditor/Makefile.am =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/expEditor/Makefile.am 2015-11-18 18:30:52 UTC (rev 5155) +++ branches/nscldaq-11.0-variablemanager/utilities/expEditor/Makefile.am 2015-11-19 11:58:05 UTC (rev 5156) @@ -17,7 +17,7 @@ TCLTESTS=properties.test proplist.test ringobject.test SPData.test svcdata.test check-TESTS: - for f in $(TCLTESTS); do TCLLIBPATH=@prefix@/TclLibs @TCLSH_CMD@ $$f; done + for f in $(TCLTESTS); do TCLLIBPATH=@prefix@/TclLibs @TCLSH_CMD@ @srcdir@/$$f; done EXTRA_DIST = $(TCLPACKAGES) $(TCLTESTS) $(IMAGES) \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jr...@us...> - 2015-11-18 18:30:54
|
Revision: 5155 http://sourceforge.net/p/nscldaq/code/5155 Author: jrtomps Date: 2015-11-18 18:30:52 +0000 (Wed, 18 Nov 2015) Log Message: ----------- Fixes bug 4864. Documentation corrected for ReadoutCallouts.tcl Modified Paths: -------------- trunk/main/daq/readoutgui/readoutgui_user.xml Modified: trunk/main/daq/readoutgui/readoutgui_user.xml =================================================================== --- trunk/main/daq/readoutgui/readoutgui_user.xml 2015-11-18 15:36:41 UTC (rev 5154) +++ trunk/main/daq/readoutgui/readoutgui_user.xml 2015-11-18 18:30:52 UTC (rev 5155) @@ -1213,10 +1213,11 @@ </para> <para> The ReadoutShell looks for the <filename>ReadoutCallouts.tcl</filename> - file in the following directories. Only the first one is - sourced in. Sourcing is done at the global level. + file in the following three locations. Any ReadoutCallouts.tcl script + found is sourced in at the global level. The search order (and + thereby execution order) is: </para> - <itemizedlist> + <orderedlist> <listitem> <para> <filename>~</filename> your home directory. @@ -1235,7 +1236,7 @@ at the time ReadoutShell was first started. </para> </listitem> - </itemizedlist> + </orderedlist> <para> If ReadoutCallouts or any other script sourced into ReadoutShell provides them the following <command>proc</command>s @@ -1244,7 +1245,7 @@ <note> <title>NOTE</title> <para> - Two additional callouts not avaialble in <filename>ReadoutCallouts.tcl</filename> + Two additional callouts not available in <filename>ReadoutCallouts.tcl</filename> scripts for NSCLDAQ-10.x and earlier have been added. </para> </note> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-18 15:36:44
|
Revision: 5154 http://sourceforge.net/p/nscldaq/code/5154 Author: ron-fox Date: 2015-11-18 15:36:41 +0000 (Wed, 18 Nov 2015) Log Message: ----------- Missing test Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/utilities/varmanager/Makefile.am Added Paths: ----------- branches/nscldaq-11.0-variablemanager/utilities/varmanager/statemachinetests.py Modified: branches/nscldaq-11.0-variablemanager/utilities/varmanager/Makefile.am =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/varmanager/Makefile.am 2015-11-18 15:04:07 UTC (rev 5153) +++ branches/nscldaq-11.0-variablemanager/utilities/varmanager/Makefile.am 2015-11-18 15:36:41 UTC (rev 5154) @@ -135,6 +135,7 @@ EXTRA_DIST= vardb.test \ vardbtest.py dirtreetest.py variabletest.py \ + enumtest.py statemachinetests.py \ vardbsh.tcl.in $(DOCFILES) # Get compiled bindings installed where the languages can find them relies on the libs being Added: branches/nscldaq-11.0-variablemanager/utilities/varmanager/statemachinetests.py =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/varmanager/statemachinetests.py (rev 0) +++ branches/nscldaq-11.0-variablemanager/utilities/varmanager/statemachinetests.py 2015-11-18 15:36:41 UTC (rev 5154) @@ -0,0 +1,180 @@ +#!/usr/bin/env python + + + +# This software is Copyright by the Board of Trustees of Michigan +# State University (c) Copyright 2013. +# +# You may use this software under the terms of the GNU public license +# (GPL). The terms of this license are described at: +# +# http://www.gnu.org/licenses/gpl.txt +# +# Author: +# Ron Fox +# NSCL +# Michigan State University +# East Lansing, MI 48824-1321 + +## +# @file statemachinetests.py +# @brief Tests for the statemachine data type bindings +# @author <fo...@ns...> + +import unittest +import tempfile +import os +import sqlite3 + + +import nscldaq.vardb.statemachine +import nscldaq.vardb.vardb +import nscldaq.vardb.variable +import nscldaq.vardb.enum + +transitions = { 'first': ('second',), 'second' : ('third',), + 'third': ('first', 'second')} + +class StateMachineTests(unittest.TestCase): + def setUp(self): + myVarDb = tempfile.NamedTemporaryFile() + myVarDbName = myVarDb.name + myVarDb.close() # Unix specfic. + nscldaq.vardb.vardb.create(myVarDbName) + self._db = nscldaq.vardb.vardb.VarDb(myVarDbName) + self._tempFilename = myVarDbName + + def tearDown(self): + os.remove(self._tempFilename) + + # Tests for create: + + def test_create_ok(self): + id = nscldaq.vardb.statemachine.create( + self._db, "statemachine", transitions + ) + # Is there a new type 'statemachine' and does it have the correct id? + + sqlConn = sqlite3.connect(self._tempFilename) + sqlCurs = sqlConn.cursor() + rows = 0 + for row in sqlCurs.execute("SELECT id FROM variable_types WHERE type_name='statemachine'"): + self.assertEquals(id, row[0]) + rows = rows + 1 + self.assertEquals(1, rows) + + + def test_create_needdb(self): + self.assertRaises( + nscldaq.vardb.statemachine.error, nscldaq.vardb.statemachine.create, + (1, 'statemachine', transitions) + ) + def test_create_needstatemap(self): + self.assertRaises( + nscldaq.vardb.statemachine.error, nscldaq.vardb.statemachine.create, + (self._db, "statemachine", 1) + ) + def test_create_canmakevar(self): + nscldaq.vardb.statemachine.create( + self._db, 'statemachine', transitions + ) + nscldaq.vardb.variable.create(self._db, None, '/myvar', 'statemachine') + var = nscldaq.vardb.variable.Variable(self._db, path = '/myvar') + self.assertEquals('first', var.get()) + + # Tests for isStateMachine: + + def test_isStatemachine_yes(self): + typeId = nscldaq.vardb.statemachine.create( + self._db, 'statemachine', transitions + ) + self.assertTrue(nscldaq.vardb.statemachine.isStateMachine( + self._db, typeId + )) + def test_isStatemachine_no(self): + nscldaq.vardb.enum.create( + self._db, 'notstatemachine', ('first', 'second', 'third') + ) + typeId = nscldaq.vardb.enum.id(self._db, 'notstatemachine') + self.assertFalse(nscldaq.vardb.statemachine.isStateMachine( + self._db, typeId + )) + # Tests for validNextStates + + def test_validnextstates_type_first(self): + typeId = nscldaq.vardb.statemachine.create( + self._db, 'statemachine', transitions + ) + nextStates = nscldaq.vardb.statemachine.validNextStates( + self._db, typeId, 'first' + ) + self.assertEquals(1, len(nextStates)) + self.assertEquals('second', nextStates[0]) + + def test_validnextstates_type_third(self): + typeId = nscldaq.vardb.statemachine.create( + self._db, 'statemachine', transitions + ) + nextStates = nscldaq.vardb.statemachine.validNextStates( + self._db, typeId, 'third' + ) + self.assertEquals(2, len(nextStates)) + self.assertEquals('first', nextStates[0]) + self.assertEquals('second', nextStates[1]) + + def test_validnextstates_var_first(self): + typeId = nscldaq.vardb.statemachine.create( + self._db, 'statemachine', transitions + ) + nscldaq.vardb.variable.create(self._db, None, '/myvar', 'statemachine') + var = nscldaq.vardb.variable.Variable(self._db, path='/myvar') + nextStates = nscldaq.vardb.statemachine.validNextStates( + self._db, var.getId() + ) + self.assertEquals(1, len(nextStates)) + self.assertEquals('second', nextStates[0]) + + def test_validnextstates_var_third(self): + typeId = nscldaq.vardb.statemachine.create( + self._db, 'statemachine', transitions + ) + nscldaq.vardb.variable.create(self._db, None, '/myvar', 'statemachine') + var = nscldaq.vardb.variable.Variable(self._db, path='/myvar') + var.set('second') + var.set('third') + nextStates = nscldaq.vardb.statemachine.validNextStates( + self._db, var.getId() + ) + self.assertEquals(2, len(nextStates)) + self.assertEquals('first', nextStates[0]) + self.assertEquals('second', nextStates[1]) + + def test_validnextstates_wrongparamcount(self): + typeId = nscldaq.vardb.statemachine.create( + self._db, 'statemachine', transitions + ) + self.assertRaises( + nscldaq.vardb.statemachine.error, + nscldaq.vardb.statemachine.validNextStates, + (self._db, typeId, 'first', 'extra') + ) + + # tests for getTransitionMap + + def test_gettransition_map(self): + typeId = typeId = nscldaq.vardb.statemachine.create( + self._db, 'statemachine', transitions + ) + transitionMap = nscldaq.vardb.statemachine.getTransitionMap( + self._db, typeId + ) + self.assertEquals(transitions, transitionMap) + + +if __name__ == '__main__': + unittest.main() + + + + + Property changes on: branches/nscldaq-11.0-variablemanager/utilities/varmanager/statemachinetests.py ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-18 15:04:09
|
Revision: 5153 http://sourceforge.net/p/nscldaq/code/5153 Author: ron-fox Date: 2015-11-18 15:04:07 +0000 (Wed, 18 Nov 2015) Log Message: ----------- * Make tclbindings.test more verbose -which test caused the heap smash in last jenkins run. * Make usage string an std::string so we don't have to be concerned about sprintf overflowing the fixed length character array we had used... in case that was the problem. Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/CVarMgrOpenCommand.cpp branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/tclbindings.test Modified: branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/CVarMgrOpenCommand.cpp =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/CVarMgrOpenCommand.cpp 2015-11-18 14:16:24 UTC (rev 5152) +++ branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/CVarMgrOpenCommand.cpp 2015-11-18 15:04:07 UTC (rev 5153) @@ -65,17 +65,20 @@ CVarMgrOpenCommand::operator()(CTCLInterpreter& interp, std::vector<CTCLObject>& objv) { CVarMgrApi* pApi(0); - char usage[100]; bindAll(interp, objv); - sprintf(usage, "Usage\n %s database-uri", std::string(objv[1]).c_str()); + std::string usage = "Usage\n "; + usage += std::string(objv[1]); + usage += " database-uri"; + + try { char handle[100]; - requireExactly(objv, 2, usage); + requireExactly(objv, 2, usage.c_str()); std::string uri = objv[1]; pApi = CVarMgrApiFactory::create(uri); Modified: branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/tclbindings.test =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/tclbindings.test 2015-11-18 14:16:24 UTC (rev 5152) +++ branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/tclbindings.test 2015-11-18 15:04:07 UTC (rev 5153) @@ -31,6 +31,8 @@ package require varmgr +tcltest::configure -verbose [list body error start] + # Utilities: proc tempName {} { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-18 14:16:27
|
Revision: 5152 http://sourceforge.net/p/nscldaq/code/5152 Author: ron-fox Date: 2015-11-18 14:16:24 +0000 (Wed, 18 Nov 2015) Log Message: ----------- Be explicity about location of tests to run Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/Makefile.am Modified: branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/Makefile.am =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/Makefile.am 2015-11-18 13:35:56 UTC (rev 5151) +++ branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/Makefile.am 2015-11-18 14:16:24 UTC (rev 5152) @@ -107,10 +107,10 @@ check-TESTS: for f in $(SERVER_TESTS); do echo $$f : ; PYTHONPATH=@prefix@/pythonLibs BINDIR=@bindir@ @PYTHON@ @srcdir@/$$f; done - PYTHONPATH=@prefix@/pythonLibs testApi - TCLLIBPATH=@prefix@/TclLibs @TCLSH_CMD@ tclbindings.test - PYTHONPATH=@prefix@/pythonLibs BINDIR=@prefix@/bin TCLLIBPATH=@prefix@/TclLibs @TCLSH_CMD@ tclsub.test - PYTHONPATH=@prefix@/pythonLibs testSub + PYTHONPATH=@prefix@/pythonLibs @builddir@/testApi + TCLLIBPATH=@prefix@/TclLibs @TCLSH_CMD@ @srcdir@/tclbindings.test + PYTHONPATH=@prefix@/pythonLibs BINDIR=@prefix@/bin TCLLIBPATH=@prefix@/TclLibs @TCLSH_CMD@ @srcdir@/tclsub.test + PYTHONPATH=@prefix@/pythonLibs @builddir@/testSub EXTRA_DIST=$(SERVER_TESTS) testBase.py vardbServer.py varserver.xml tclbindings.test tclsub.test \ vardb-service.sh This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-18 13:35:59
|
Revision: 5151 http://sourceforge.net/p/nscldaq/code/5151 Author: ron-fox Date: 2015-11-18 13:35:56 +0000 (Wed, 18 Nov 2015) Log Message: ----------- * Broaden the net of captured/relayed exceptions (try to fix non-working test in Jenkins or at least understand why). * Put error messages out on stderr not stdout because - Filter pipeline elements should not get error messages - Error messages _should_ go to the error output. Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/utilities/filter/CFilterMain.cpp Modified: branches/nscldaq-11.0-variablemanager/utilities/filter/CFilterMain.cpp =================================================================== --- branches/nscldaq-11.0-variablemanager/utilities/filter/CFilterMain.cpp 2015-11-18 12:44:01 UTC (rev 5150) +++ branches/nscldaq-11.0-variablemanager/utilities/filter/CFilterMain.cpp 2015-11-18 13:35:56 UTC (rev 5151) @@ -32,6 +32,7 @@ #include <stdlib.h> #include "filterargs.h" #include "CFatalException.h" +#include <stdexcept> /**! Constructor Constructs a mediator object with a CCompositeFilter @@ -75,10 +76,26 @@ } catch (CException& exc) { - std::cout << exc.ReasonText() << std::endl; - std::cout << exc.WasDoing() << std::endl; + std::cerr << exc.ReasonText() << std::endl; + std::cerr << exc.WasDoing() << std::endl; throw CFatalException(); + } + catch (std::string msg) { + std::cerr << "String exception caught: " << msg << std::endl; + throw CFatalException(); } + catch (const char* msg) { + std::cerr << "const char* exception caught: " << msg << std::endl; + throw CFatalException(); + } + catch (std::exception& e) { + std::cerr << "Std::exception caught: " << e.what() << std::endl; + throw CFatalException(); + } + catch (...) { + std::cerr << "Unanticipated exception caught. \n"; + throw CFatalException(); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-18 12:44:02
|
Revision: 5150 http://sourceforge.net/p/nscldaq/code/5150 Author: ron-fox Date: 2015-11-18 12:44:01 +0000 (Wed, 18 Nov 2015) Log Message: ----------- Add simplesetups directroy tree makefile generation -- somehow got left out of merge. Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/configure.ac Modified: branches/nscldaq-11.0-variablemanager/configure.ac =================================================================== --- branches/nscldaq-11.0-variablemanager/configure.ac 2015-11-18 11:39:51 UTC (rev 5149) +++ branches/nscldaq-11.0-variablemanager/configure.ac 2015-11-18 12:44:01 UTC (rev 5150) @@ -487,6 +487,10 @@ daq/actions/Makefile daq/eventbuilder/offlineorderer/Makefile daq/eventbuilder/offlineorderer/figures/Makefile + simplesetups/Makefile + simplesetups/v775/Makefile + simplesetups/v785/Makefile + simplesetups/vmusb/Makefile sbs/Makefile sbs/driver/Makefile sbs/driver/src/Makefile This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-18 11:39:56
|
Revision: 5149 http://sourceforge.net/p/nscldaq/code/5149 Author: ron-fox Date: 2015-11-18 11:39:51 +0000 (Wed, 18 Nov 2015) Log Message: ----------- Merge with 11.1 trunk - rebase. Modified Paths: -------------- branches/nscldaq-11.0-variablemanager/ChangeLog branches/nscldaq-11.0-variablemanager/Makefile.am branches/nscldaq-11.0-variablemanager/base/Makefile.am branches/nscldaq-11.0-variablemanager/base/dataflow/CRemoteAccess.cpp branches/nscldaq-11.0-variablemanager/base/dataflow/CRingBuffer.cpp branches/nscldaq-11.0-variablemanager/base/dataflow/CRingCommand.cpp branches/nscldaq-11.0-variablemanager/base/dataflow/Makefile.am branches/nscldaq-11.0-variablemanager/base/dataflow/RingMaster.tcl branches/nscldaq-11.0-variablemanager/base/dataflow/crmastertests.cpp branches/nscldaq-11.0-variablemanager/base/dataflow/ringbuffer.tcl branches/nscldaq-11.0-variablemanager/base/dataflow/ringlib.xml branches/nscldaq-11.0-variablemanager/base/dataflow/ringpipes.xml branches/nscldaq-11.0-variablemanager/base/dataflow/ringtostdout.cpp branches/nscldaq-11.0-variablemanager/base/dataflow/ringtostdoutsw.ggo branches/nscldaq-11.0-variablemanager/base/dataflow/tclring.xml branches/nscldaq-11.0-variablemanager/base/headers/Makefile.am branches/nscldaq-11.0-variablemanager/base/headers/Refptr.h branches/nscldaq-11.0-variablemanager/base/headers/daqdatatypes.h branches/nscldaq-11.0-variablemanager/base/os/Makefile.am branches/nscldaq-11.0-variablemanager/base/os/daqshm.cpp branches/nscldaq-11.0-variablemanager/base/os/daqshm.h branches/nscldaq-11.0-variablemanager/base/os/os.cpp branches/nscldaq-11.0-variablemanager/base/os/os.h branches/nscldaq-11.0-variablemanager/base/os/shm.xml branches/nscldaq-11.0-variablemanager/base/plotcontainer/Makefile.am branches/nscldaq-11.0-variablemanager/base/plotcontainer/xyplot.tcl branches/nscldaq-11.0-variablemanager/base/tclutils/Makefile.am branches/nscldaq-11.0-variablemanager/base/tclwidgets/FrameSequencer.tcl branches/nscldaq-11.0-variablemanager/base/tclwidgets/Makefile.am branches/nscldaq-11.0-variablemanager/base/tcpip/CTCPConnectionLost.cpp branches/nscldaq-11.0-variablemanager/base/thread/CBufferQueue.cpp branches/nscldaq-11.0-variablemanager/base/thread/CBufferQueue.h branches/nscldaq-11.0-variablemanager/base/thread/CSynchronizedThread.cpp branches/nscldaq-11.0-variablemanager/base/thread/thread.xml branches/nscldaq-11.0-variablemanager/configure.ac branches/nscldaq-11.0-variablemanager/daq/Makefile.am branches/nscldaq-11.0-variablemanager/daq/actions/Actions.h branches/nscldaq-11.0-variablemanager/daq/actions/Makefile.am branches/nscldaq-11.0-variablemanager/daq/actions/actions.tcl branches/nscldaq-11.0-variablemanager/daq/actions/actions.test branches/nscldaq-11.0-variablemanager/daq/actions/actions.xml branches/nscldaq-11.0-variablemanager/daq/eventbuilder/CConfigure.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/CFragmentHandler.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/CFragmentHandler.h branches/nscldaq-11.0-variablemanager/daq/eventbuilder/CFragmentHandlerCommand.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/CInputStatsCommand.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/CInputStatsCommand.h branches/nscldaq-11.0-variablemanager/daq/eventbuilder/COrdererOutput.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ConnectionManager.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/DuplicateTimestamp.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/EVBStateCallouts.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/GUI.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/Makefile.am branches/nscldaq-11.0-variablemanager/daq/eventbuilder/OrdererPackage.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/api.xml branches/nscldaq-11.0-variablemanager/daq/eventbuilder/cmanagerCallbacks.test branches/nscldaq-11.0-variablemanager/daq/eventbuilder/evbRdoCallouts.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/evbRdoCallouts10.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/evbrdocallouts.test branches/nscldaq-11.0-variablemanager/daq/eventbuilder/evbrdocallouts10.test branches/nscldaq-11.0-variablemanager/daq/eventbuilder/fragment.h branches/nscldaq-11.0-variablemanager/daq/eventbuilder/inputStatistics.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/latePopup.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/InputPipeline.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/JobBuilderUI.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/JobConfigUI.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/JobProcessor.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/Makefile.am branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/MissingSourceUI.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/OfflineOrdererUI.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/RunProcessor.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/RunStatusUI.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/jobprocessor.test branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/offlineorderer.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/runprocessor.test branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/runstatusui.test branches/nscldaq-11.0-variablemanager/daq/eventbuilder/orderer.xml branches/nscldaq-11.0-variablemanager/daq/eventbuilder/outputStatistics.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsource/CRingSource.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsource/CRingSource.h branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsource/Makefile.am branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsource/options.ggo branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsource/ringsource.xml branches/nscldaq-11.0-variablemanager/daq/eventbuilder/startOrderer.in branches/nscldaq-11.0-variablemanager/daq/eventbuilder/tclTests.tcl branches/nscldaq-11.0-variablemanager/daq/format/CDataFormatItem.h branches/nscldaq-11.0-variablemanager/daq/format/CRingItem.cpp branches/nscldaq-11.0-variablemanager/daq/format/CRingItem.h branches/nscldaq-11.0-variablemanager/daq/format/CRingPhysicsEventCountItem.h branches/nscldaq-11.0-variablemanager/daq/format/Makefile.am branches/nscldaq-11.0-variablemanager/daq/format/physcounttests.cpp branches/nscldaq-11.0-variablemanager/daq/format/ringitemtests.cpp branches/nscldaq-11.0-variablemanager/daq/readoutgui/DataSourceManager.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/DataSourceMonitor.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/DataSourceUI.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/ExpFileSystemConfig.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/Makefile.am branches/nscldaq-11.0-variablemanager/daq/readoutgui/ReadoutGui.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/ReadoutGuiClient.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/RunstateMachine.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/delayProvider.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/delayprovider.test branches/nscldaq-11.0-variablemanager/daq/readoutgui/dsourcemgr.test branches/nscldaq-11.0-variablemanager/daq/readoutgui/eventLogBundle.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/eventlog.test branches/nscldaq-11.0-variablemanager/daq/readoutgui/offlineProvider.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/rdoCalloutsBundle.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/readoutGuiProvider.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/readoutgui.xml branches/nscldaq-11.0-variablemanager/daq/readoutgui/remoteControl.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/rstatemachine.test branches/nscldaq-11.0-variablemanager/daq/readoutgui/s800.test branches/nscldaq-11.0-variablemanager/daq/readoutgui/s800Provider.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/s800fake.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/sshProvider.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/sshpipe.test branches/nscldaq-11.0-variablemanager/daq/readoutgui/tclTests.tcl branches/nscldaq-11.0-variablemanager/daq/readoutgui/ui.tcl branches/nscldaq-11.0-variablemanager/daq/s800callouts/Makefile.am branches/nscldaq-11.0-variablemanager/daq/s800callouts/s800rctl.tcl branches/nscldaq-11.0-variablemanager/daqsetup.bash.in branches/nscldaq-11.0-variablemanager/docbuild/Makefile.am branches/nscldaq-11.0-variablemanager/docbuild/docbuilder.tcl branches/nscldaq-11.0-variablemanager/docconfig/config branches/nscldaq-11.0-variablemanager/dotests branches/nscldaq-11.0-variablemanager/epics/controlpush/Makefile.am branches/nscldaq-11.0-variablemanager/epics/epicsdisplay/epicsdisplay.xml branches/nscldaq-11.0-variablemanager/m4/tcl.m4 branches/nscldaq-11.0-variablemanager/nscldaq.in branches/nscldaq-11.0-variablemanager/sbs/driver/dd/GNUmakefile.am branches/nscldaq-11.0-variablemanager/sbs/driver/dd/btpdd.h branches/nscldaq-11.0-variablemanager/sbs/nsclapi/CVME.h branches/nscldaq-11.0-variablemanager/sbs/nsclapi/CVMEInterface.h branches/nscldaq-11.0-variablemanager/sbs/nsclapi/CVMEptr.h branches/nscldaq-11.0-variablemanager/sbs/nsclapi/MmapError.h branches/nscldaq-11.0-variablemanager/sbs/nsclapi/SBSBit3API.h branches/nscldaq-11.0-variablemanager/sbs/nsclapi/VmeModule.cpp branches/nscldaq-11.0-variablemanager/sbs/nsclapi/VmeModule.h branches/nscldaq-11.0-variablemanager/sbs/readout/CExperiment.cpp branches/nscldaq-11.0-variablemanager/sbs/readout/CExperiment.h branches/nscldaq-11.0-variablemanager/sbs/readout/CRunControlPackage.cpp branches/nscldaq-11.0-variablemanager/sbs/readout/CScaler.cpp branches/nscldaq-11.0-variablemanager/sbs/readout/CScaler.h branches/nscldaq-11.0-variablemanager/sbs/readout/CScalerBank.cpp branches/nscldaq-11.0-variablemanager/sbs/readout/CScalerBank.h branches/nscldaq-11.0-variablemanager/sbs/readout/Makefile.am branches/nscldaq-11.0-variablemanager/sbs/readout/SBSRdoMakeIncludes.in branches/nscldaq-11.0-variablemanager/sbs/readout/SBSReadout.xml branches/nscldaq-11.0-variablemanager/sbs/scripted/Makefile.am branches/nscldaq-11.0-variablemanager/sbs/slowcontrols/caenv812/Makefile.am branches/nscldaq-11.0-variablemanager/sbs/slowcontrols/n568b/n568.xml branches/nscldaq-11.0-variablemanager/sbs/tclpackage/VMECommand.h branches/nscldaq-11.0-variablemanager/sbs/tclpackage/VMEMapCommand.cpp branches/nscldaq-11.0-variablemanager/sbs/tclpackage/VMEMapCommand.h branches/nscldaq-11.0-variablemanager/sbs/tclpackage/vmetcl.xml branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CADC2530.cpp branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CADC2530.h branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CAENcard.h branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CCAENV560.h branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CCAENV830.h branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CModule32.h branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CSIS3600.cpp branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CSIS3600.h branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CSIS3820.cpp branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CSIS3820.h branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CVMEScalerLRS1151.h branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CaenIO.cpp branches/nscldaq-11.0-variablemanager/sbs/vmemodules/CaenIO.h branches/nscldaq-11.0-variablemanager/sbs/vmemodules/DeviceSupport.xml branches/nscldaq-11.0-variablemanager/sbs/vmemodules/Makefile.am branches/nscldaq-11.0-variablemanager/sbs/vmemodules/Nimout.h branches/nscldaq-11.0-variablemanager/servers/portmanager/ConnectionManager.tcl branches/nscldaq-11.0-variablemanager/servers/portmanager/Makefile.am branches/nscldaq-11.0-variablemanager/servers/portmanager/PortManagerTests.py branches/nscldaq-11.0-variablemanager/servers/portmanager/portmanager.xml branches/nscldaq-11.0-variablemanager/tcl++incorp.sh branches/nscldaq-11.0-variablemanager/testBuildTarball branches/nscldaq-11.0-variablemanager/usb/Makefile.am branches/nscldaq-11.0-variablemanager/usb/caenfwloader/CAENComm_VMUSB.cpp branches/nscldaq-11.0-variablemanager/usb/caenfwloader/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/CTheApplication.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/CTheApplication.h branches/nscldaq-11.0-variablemanager/usb/ccusb/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSB.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSB.h branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSBReadoutList.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSBReadoutList.h branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb.xml branches/nscldaq-11.0-variablemanager/usb/ccusb/commands/CBeginRun.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/commands/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/controlpanels/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/core/Makefile.in branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CConfiguration.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/devices/CCCUSBModule.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/devices/CCCUSBModule.h branches/nscldaq-11.0-variablemanager/usb/ccusb/devices/CTclModule.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/devices/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/devtests/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/driverkit/CCUSBDriverIncludes.in branches/nscldaq-11.0-variablemanager/usb/ccusb/rdothread/CAcquisitionThread.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/router/COutputThread.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/router/COutputThread.h branches/nscldaq-11.0-variablemanager/usb/ccusb/router/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/tcldrivers/APhillips71xx.tcl branches/nscldaq-11.0-variablemanager/usb/ccusb/tcldrivers/ATrigger2367.tcl branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/C894.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/C894.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CCAEN894Creator.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CCAEN894Creator.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CControlHardware.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CControlModule.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CModuleCommand.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CModuleCreator.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CModuleFactory.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CPH7106.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CPH7106.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CPH7106Creator.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CPH7106Creator.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CTclControlModule.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CTclControlModule.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CTclModuleCreator.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CTclModuleCreator.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/DriverTemplate.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/DriverTemplate.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/TclServer.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/TclServer.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclservertests/Makefile.am branches/nscldaq-11.0-variablemanager/usb/ccusb/tclservertests/ctclmoduletest.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclservertests/modulecommandtest.cpp branches/nscldaq-11.0-variablemanager/usb/common/devices/CCamacCrate.hpp branches/nscldaq-11.0-variablemanager/usb/common/slowcontrols/CControlHardwareT.h branches/nscldaq-11.0-variablemanager/usb/common/slowcontrols/CControlHardwareT.hpp branches/nscldaq-11.0-variablemanager/usb/common/slowcontrols/CControlModuleT.h branches/nscldaq-11.0-variablemanager/usb/common/slowcontrols/CControlModuleT.hpp branches/nscldaq-11.0-variablemanager/usb/loaders/ccusb_flash.cpp branches/nscldaq-11.0-variablemanager/usb/mesytec/MCFD16/MCFD16Control.tcl branches/nscldaq-11.0-variablemanager/usb/mesytec/MCFD16/MCFD16Gui.tcl branches/nscldaq-11.0-variablemanager/usb/mesytec/MCFD16/MCFD16GuiApp.tcl branches/nscldaq-11.0-variablemanager/usb/mesytec/MCFD16/MCFD16USB.tcl branches/nscldaq-11.0-variablemanager/usb/mesytec/MCFD16/mcfd16control.xml branches/nscldaq-11.0-variablemanager/usb/mesytec/MCFD16/mcfd16usb.test branches/nscldaq-11.0-variablemanager/usb/mesytec/MSCF16/MSCF16Control.tcl branches/nscldaq-11.0-variablemanager/usb/mesytec/MSCF16/mscf16control.xml branches/nscldaq-11.0-variablemanager/usb/vmusb/CTheApplication.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/CTheApplication.h branches/nscldaq-11.0-variablemanager/usb/vmusb/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/commands/CBeginRun.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/commands/CEndRun.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/commands/CExit.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/commands/CExit.h branches/nscldaq-11.0-variablemanager/usb/vmusb/commands/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/client.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/v812usbcontrol.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CADCCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CADCCommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCAENV830Command.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCAENV830Command.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CConfiguration.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CHINPCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CHINPCommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CHiRACommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CHiRACommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMarkerCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMarkerCommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CPSDCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CPSDCommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CScalerCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CScalerCommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CUserCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CUserCommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1495scCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1495scCommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1729Command.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1729Command.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/C3820.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CCBD8210ReadoutList.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CCBDCamacBranch.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CHINP.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CHINP.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMADC32.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMADC32.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMADCChain.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMADCChain.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMASE.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMASE.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CNADC2530.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CPSD.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CPSD.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CStack.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CVMUSBControl.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CVMUSBControl.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CXLM.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CXLM.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CXLMFERA.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CXLMFERA.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CXLMTimestamp.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CXLMTimestamp.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/MADC32Registers.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/devtests/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/devtests/TestRunner.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devtests/cvmusbtest.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/driverkit/VMUSBDriverIncludes.in branches/nscldaq-11.0-variablemanager/usb/vmusb/driverkit/drivertemplate.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/rdothread/CAcquisitionThread.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/rdothread/CAcquisitionThread.h branches/nscldaq-11.0-variablemanager/usb/vmusb/rdothread/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/router/COutputThread.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/router/COutputThread.h branches/nscldaq-11.0-variablemanager/usb/vmusb/router/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/VMUSBDriverSupport.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CChicoTriggerCreator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CChicoTriggerCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CControlHardware.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CControlModule.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CGDG.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CGDG.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CJtecgdgCreator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CJtecgdgCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CModuleCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CModuleCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CModuleFactory.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CTclControlModule.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CTclControlModule.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CTclModuleCreator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CTclModuleCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CUserDriverSample.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CV6533.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CV6533.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CV6533Creator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CV6533Creator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CV812.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CV812.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CV812Creator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CV812Creator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CVMUSBCreator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CVMUSBCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CVMUSBModule.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CVMUSBModule.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/ChicoTrigger.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/ChicoTrigger.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/TclServer.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/TclServer.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclservertests/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/tclservertests/ctclcontrolmoduletest.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclservertests/modulecommandtest.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CMockVMUSB.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CMockVMUSB.h branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSB.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSB.h branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSBEthernet.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSBEthernet.h branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSBReadoutList.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSBReadoutList.h branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSBRemote.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSBRemote.h branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSBusb.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSBusb.h branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/Makefile.am branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/TestRunner.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/regTests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/vmeTests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusbReadout.xml branches/nscldaq-11.0-variablemanager/utilities/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/bufdump/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/compatibility/BufferToRing.cpp branches/nscldaq-11.0-variablemanager/utilities/compatibility/CBufferConverter.cpp branches/nscldaq-11.0-variablemanager/utilities/compatibility/CBufferConverter.h branches/nscldaq-11.0-variablemanager/utilities/compatibility/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/compatibility/buffertoring.ggo branches/nscldaq-11.0-variablemanager/utilities/compatibility/s800toring.in branches/nscldaq-11.0-variablemanager/utilities/daqstart/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/dumpend/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/eventlog/eventlogMain.cpp branches/nscldaq-11.0-variablemanager/utilities/expEditor/ConnectorInstaller.tcl branches/nscldaq-11.0-variablemanager/utilities/expEditor/ConnectorObject.tcl branches/nscldaq-11.0-variablemanager/utilities/expEditor/ObjectInstaller.tcl branches/nscldaq-11.0-variablemanager/utilities/expEditor/Service.tcl branches/nscldaq-11.0-variablemanager/utilities/expEditor/StateProgram.tcl branches/nscldaq-11.0-variablemanager/utilities/expEditor/connector.tcl branches/nscldaq-11.0-variablemanager/utilities/expEditor/daqobject.tcl branches/nscldaq-11.0-variablemanager/utilities/expEditor/ringBufferObject.tcl branches/nscldaq-11.0-variablemanager/utilities/filter/CAbnormalEndRunFilterHandler.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/CFilterMain.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/CMediator.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/CMediator.h branches/nscldaq-11.0-variablemanager/utilities/filter/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/filter/filtermaintests.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/infinitemediatortests.cpp branches/nscldaq-11.0-variablemanager/utilities/newscaler/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/newscaler/channel.tcl branches/nscldaq-11.0-variablemanager/utilities/newscaler/channel.test branches/nscldaq-11.0-variablemanager/utilities/newscaler/channelcmd.test branches/nscldaq-11.0-variablemanager/utilities/newscaler/page.tcl branches/nscldaq-11.0-variablemanager/utilities/newscaler/scalerconfig.tcl branches/nscldaq-11.0-variablemanager/utilities/newscaler/scalermain.tcl branches/nscldaq-11.0-variablemanager/utilities/sclclient/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/statemanager/Makefile.am branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/factoryTests.cpp branches/nscldaq-11.0-variablemanager/utilities/varmanager/server/pyNotifier.cpp Added Paths: ----------- branches/nscldaq-11.0-variablemanager/11.1-conversion.config branches/nscldaq-11.0-variablemanager/11.1-conversion.creator branches/nscldaq-11.0-variablemanager/11.1-conversion.files branches/nscldaq-11.0-variablemanager/11.1-conversion.includes branches/nscldaq-11.0-variablemanager/base/dataflow/ringbuffer_man.xml branches/nscldaq-11.0-variablemanager/base/dataflow/ringbuffer_user.xml branches/nscldaq-11.0-variablemanager/base/headers/VMEAddressModifier.h branches/nscldaq-11.0-variablemanager/base/headers/byte_cast.h branches/nscldaq-11.0-variablemanager/base/headers/make_unique.h branches/nscldaq-11.0-variablemanager/base/plotcontainer/plotcontainer.xml branches/nscldaq-11.0-variablemanager/base/tclutils/ branches/nscldaq-11.0-variablemanager/base/tclutils/Process.tcl branches/nscldaq-11.0-variablemanager/base/tclwidgets/ChannelLabel.tcl branches/nscldaq-11.0-variablemanager/base/tclwidgets/FrameManager.tcl branches/nscldaq-11.0-variablemanager/base/tclwidgets/RingStatus.tcl branches/nscldaq-11.0-variablemanager/base/tclwidgets/RingStatus.xml branches/nscldaq-11.0-variablemanager/base/tclwidgets/TransientLabel.tcl branches/nscldaq-11.0-variablemanager/base/tclwidgets/channellabel.test branches/nscldaq-11.0-variablemanager/base/tclwidgets/framemanager.test branches/nscldaq-11.0-variablemanager/base/tclwidgets/framesequencer.test branches/nscldaq-11.0-variablemanager/base/tclwidgets/tclTests.tcl branches/nscldaq-11.0-variablemanager/base/tclwidgets/transientlabel.test branches/nscldaq-11.0-variablemanager/base/testutils/ branches/nscldaq-11.0-variablemanager/daq/actions/ branches/nscldaq-11.0-variablemanager/daq/actions/Actions.cpp branches/nscldaq-11.0-variablemanager/daq/actions/TestActionPackage.cpp branches/nscldaq-11.0-variablemanager/daq/actions/testCompile.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/COutOfOrderTraceCommand.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/COutOfOrderTraceCommand.h branches/nscldaq-11.0-variablemanager/daq/eventbuilder/OutOfOrderUI.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/endrunmon.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/eventbuilder_user.xml branches/nscldaq-11.0-variablemanager/daq/eventbuilder/offlineorderer/EVBConfigure.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringSourceMgr.tcl branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsource/CRingItemToFragmentTransform.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsource/CRingItemToFragmentTransform.h branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsource/TestRunner.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsource/cringsourcetests.cpp branches/nscldaq-11.0-variablemanager/daq/eventbuilder/ringsourcemgr.test branches/nscldaq-11.0-variablemanager/daq/format/dataformat_dev.xml branches/nscldaq-11.0-variablemanager/daq/format/dataformat_user.xml branches/nscldaq-11.0-variablemanager/daq/format/infotests.cpp branches/nscldaq-11.0-variablemanager/daq/format/miscformattests.cpp branches/nscldaq-11.0-variablemanager/daq/format/phystests.cpp branches/nscldaq-11.0-variablemanager/daq/format/scalerformattests.cpp branches/nscldaq-11.0-variablemanager/daq/format/statechangetests.cpp branches/nscldaq-11.0-variablemanager/daq/format/textformattests.cpp branches/nscldaq-11.0-variablemanager/daq/format/trigcounttests.cpp branches/nscldaq-11.0-variablemanager/daq/readoutgui/offlineprovider.test branches/nscldaq-11.0-variablemanager/daq/readoutgui/readoutgui_man.xml branches/nscldaq-11.0-variablemanager/daq/readoutgui/readoutgui_user.xml branches/nscldaq-11.0-variablemanager/daq/readoutgui/remotecontrol.test branches/nscldaq-11.0-variablemanager/daq/readoutgui/stageareaValidation.tcl branches/nscldaq-11.0-variablemanager/daq/s800callouts/fakeControlServer.tcl branches/nscldaq-11.0-variablemanager/daq/s800callouts/s800rctl.test branches/nscldaq-11.0-variablemanager/daq/s800callouts/tclTests.tcl branches/nscldaq-11.0-variablemanager/docbuild/chapter2book.py branches/nscldaq-11.0-variablemanager/docbuild/images/Makefile.am branches/nscldaq-11.0-variablemanager/docbuild/images/callouts/Makefile.am branches/nscldaq-11.0-variablemanager/figures/ branches/nscldaq-11.0-variablemanager/introduction.xml branches/nscldaq-11.0-variablemanager/sbs/readout/CInitCommand.cpp branches/nscldaq-11.0-variablemanager/sbs/readout/CInitCommand.h branches/nscldaq-11.0-variablemanager/sbs/readout/SBSReadout_man.xml branches/nscldaq-11.0-variablemanager/sbs/readout/SBSReadout_user.xml branches/nscldaq-11.0-variablemanager/sbs/slowcontrols/caenv812/caenv812_man.xml branches/nscldaq-11.0-variablemanager/sbs/slowcontrols/caenv812/caenv812_user.xml branches/nscldaq-11.0-variablemanager/simplesetups/ branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/Asserts.h branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSB.i branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSBReadoutList.i branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSBRemote.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSBRemote.h branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSBusb.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CCCUSBusb.h branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CLoggingReadoutList.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CLoggingReadoutList.h branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CMockCCUSB.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/CMockCCUSB.h branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/TestRunner.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/loggingrdolistTests.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/mockccusbTests.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/rdolistTests.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/regTests.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusb/remoteRegTests.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusbReadout_man.xml branches/nscldaq-11.0-variablemanager/usb/ccusb/ccusbReadout_user.xml branches/nscldaq-11.0-variablemanager/usb/ccusb/commands/CInit.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/commands/CInit.h branches/nscldaq-11.0-variablemanager/usb/ccusb/controlpanels/ULMTriggerGUI.tcl branches/nscldaq-11.0-variablemanager/usb/ccusb/controlpanels/ULMTriggerGUIPanel.tcl branches/nscldaq-11.0-variablemanager/usb/ccusb/controlpanels/ulmtrigger.xml branches/nscldaq-11.0-variablemanager/usb/ccusb/controlpanels/ulmtrigger_startup.png branches/nscldaq-11.0-variablemanager/usb/ccusb/core/ branches/nscldaq-11.0-variablemanager/usb/ccusb/ctlconfig/ branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/Asserts.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CAD811.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CAD811.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CC1205.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CC1205.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CCAEN257.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CCAEN257.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CCCUSBModule.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CCCUSBModule.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CCamacCompat.hpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CCamacCrate.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CConfigurableObject.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CConfigurableObject.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CLRS2228.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CLRS2228.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CLRS2249.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CLRS2249.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CLRS2551.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CLRS2551.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CLeCroy4300B.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CLeCroy4434.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CMarker.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CMarker.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CMarkerCommand.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CMarkerCommand.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CPH7132.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CPH7132.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CPH7xx.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CPH7xx.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CReadoutHardware.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CReadoutHardware.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CReadoutModule.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CReadoutModule.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CStack.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CStack.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CTclModule.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CTclModule.h branches/nscldaq-11.0-variablemanager/usb/ccusb/daqconfig/CULMTrigger.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/devices/CCamacCompat.hpp branches/nscldaq-11.0-variablemanager/usb/ccusb/devices/CMarker.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/devices/CMarker.h branches/nscldaq-11.0-variablemanager/usb/ccusb/devtests/ branches/nscldaq-11.0-variablemanager/usb/ccusb/tcldrivers/ branches/nscldaq-11.0-variablemanager/usb/ccusb/tclpackage/ branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CCCUSBControl.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CCCUSBControl.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CCCUSBControlCreator.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/CCCUSBControlCreator.h branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/TestRunner.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclserver/cccusbcontroltests.cpp branches/nscldaq-11.0-variablemanager/usb/ccusb/tclservertests/ branches/nscldaq-11.0-variablemanager/usb/common/Makefile.am branches/nscldaq-11.0-variablemanager/usb/common/configurableobject/ branches/nscldaq-11.0-variablemanager/usb/common/devices/CLeCroy4448.h branches/nscldaq-11.0-variablemanager/usb/common/devices/CLeCroy4448.hpp branches/nscldaq-11.0-variablemanager/usb/common/devices/Makefile.am branches/nscldaq-11.0-variablemanager/usb/common/slowcontrols/ branches/nscldaq-11.0-variablemanager/usb/common/tcldrivers/ branches/nscldaq-11.0-variablemanager/usb/mesytec/ branches/nscldaq-11.0-variablemanager/usb/vmusb/commands/CInit.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/commands/CInit.h branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/AGD16XLM72Panel.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/MDGG16Control.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/MDGG16Gui.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/MDGG16GuiApp.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/MDGG16Proxy.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/XLM72GateDelayControl.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/XLM72ScalerGUI.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/figures/ branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/gd16_startup.png branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/mdgg16control.xml branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/mdgg16gui.test branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/mdgg16guiapp.test branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/runStateObserver.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/sclclient.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/tclTests.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/xlm72gatedelaycontrol.xml branches/nscldaq-11.0-variablemanager/usb/vmusb/controlpanels/xlm72scalerpanel.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/core/ branches/nscldaq-11.0-variablemanager/usb/vmusb/ctlconfig/ branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/Asserts.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/C3804.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/C3804.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/C3820.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/C3820.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/C785.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/C785.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/C830.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/C830.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCAENChain.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCAENChain.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCAENV1x90Opcodes.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCAENV1x90Registers.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCBD8210CamacBranchDriver.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCBD8210CamacBranchDriver.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCBD8210CrateController.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCBD8210CrateController.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCBD8210ReadoutList.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCBD8210ReadoutList.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCBDCamacBranch.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCBDCamacBranch.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCamacCompat.hpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CCamacCrate.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CDelay.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CDelay.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CDeviceCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CDeviceCommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CHINP.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CHINP.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CHiRA.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CHiRA.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CLeCroy2551.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CLeCroy4300B.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CLeCroy4434.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMADC32.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMADC32.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMADCChain.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMADCChain.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMADCScaler.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMADCScaler.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMASE.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMASE.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMQDC32RdoHdwr.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMQDC32RdoHdwr.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMQDC32StackBuilder.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMQDC32StackBuilder.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMTDC32.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMTDC32.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMarker.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMarker.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMesytecBase.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CMesytecBase.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CNADC2530.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CNADC2530.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CPSD.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CPSD.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CReadoutHardware.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CReadoutModule.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CReadoutModule.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CStack.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CStack.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CTclModule.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CTclModule.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CULMTrigger.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1495sc.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1495sc.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1729.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1729.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1x90.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV1x90.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV977.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CV977.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CVMUSBControl.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CVMUSBControl.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CXLM.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CXLM.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CXLMFERA.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CXLMFERA.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CXLMTimestamp.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/CXLMTimestamp.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/MADC32Registers.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/MQDC32Registers.h branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/TestRunner.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/ad811test.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/c3820test.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/c785test.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/cbdcratetests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/cbdtests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/configtest.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/delaytests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/hinptest.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/hiratests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/hytectests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/lrs2551tests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/lrs4300tests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/lrs4434tests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/madcscaler.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/madctests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/markertests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/masetests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/mqdctests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/mtdctests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/sis3804tests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/sis3820test.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/tdc1x90tests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/ulmtriggertests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/v1495tests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/v1729tests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/v830tests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/v977tests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/xlmferatests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/daqconfig/xlmtimestamptests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMQDC32RdoHdwr.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMQDC32RdoHdwr.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMQDC32StackBuilder.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMQDC32StackBuilder.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMTDC32.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMTDC32.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMesytecBase.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/CMesytecBase.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devices/MQDC32Registers.h branches/nscldaq-11.0-variablemanager/usb/vmusb/devtests/cmqdc32stacktest.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/devtests/cmqdc32test.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/systemcontrol/ branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/ACAENN568B.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/ACAENV1290.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/ACAENV262.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/ACAENV288.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/ACAENV785.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/ACAENV812.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/ACrdcXLM72.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/AGD16XLM72.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/AMesytecMADC32.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/APpacXLM72.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/ATimeStampXLM72.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/AXLM72.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/AXLM72Scaler.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/caenv288.test branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/crdcxlm72.test branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/manCAENN568BTests.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/manCrdcXLM72Tests.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/manPpacXLM72Tests.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/manXLM72Scaler.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/ppacxlm72.test branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/tclTests.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/vmusb.tcl branches/nscldaq-11.0-variablemanager/usb/vmusb/tcldrivers/vmusbdriversupport.test branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMDGG16Control.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMDGG16Control.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMDGG16ControlCreator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMDGG16ControlCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMarkerCreator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMarkerCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMarkerObject.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMarkerObject.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMxDCRCBus.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMxDCRCBus.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMxDCRCBusCreator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMxDCRCBusCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMxDCReset.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMxDCReset.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMxDCResetCreator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CMxDCResetCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CRunStateCommand.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CRunStateCommand.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CWienerMDGG16.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CWienerMDGG16.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CXLMControls.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CXLMControls.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CXLMControlsCreator.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/CXLMControlsCreator.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclserver/WienerMDGG16Registers.h branches/nscldaq-11.0-variablemanager/usb/vmusb/tclservertests/ branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CLoggingReadoutList.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CLoggingReadoutList.h branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSB.i branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/CVMUSBReadoutList.i branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/loggingrdolisttests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/mockvmusbtests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/remoteRegTests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/remoteVMETests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusb/vmusbrdolisttests.cpp branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusbReadout_man.xml branches/nscldaq-11.0-variablemanager/usb/vmusb/vmusbReadout_user.xml branches/nscldaq-11.0-variablemanager/utilities/Buffer/ branches/nscldaq-11.0-variablemanager/utilities/FormattedIO/ branches/nscldaq-11.0-variablemanager/utilities/IO/ branches/nscldaq-11.0-variablemanager/utilities/bufdump/dumper_man.xml branches/nscldaq-11.0-variablemanager/utilities/bufdump/dumper_user.xml branches/nscldaq-11.0-variablemanager/utilities/compatibility/10.x/ branches/nscldaq-11.0-variablemanager/utilities/compatibility/11.x/ branches/nscldaq-11.0-variablemanager/utilities/compatibility/8.x/ branches/nscldaq-11.0-variablemanager/utilities/conversion/ branches/nscldaq-11.0-variablemanager/utilities/fileanalyzer/ branches/nscldaq-11.0-variablemanager/utilities/filter/CBaseMediator.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/CBaseMediator.h branches/nscldaq-11.0-variablemanager/utilities/filter/CBufferDecoder.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/CBufferDecoder.h branches/nscldaq-11.0-variablemanager/utilities/filter/CBufferIO.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/CBufferIO.h branches/nscldaq-11.0-variablemanager/utilities/filter/CEventFormatError.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/CEventFormatError.h branches/nscldaq-11.0-variablemanager/utilities/filter/CFakeMediator.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/CFakeMediator.h branches/nscldaq-11.0-variablemanager/utilities/filter/CRunStatistics.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/CRunStatistics.h branches/nscldaq-11.0-variablemanager/utilities/filter/SatisfyTclPlus.cpp branches/nscldaq-11.0-variablemanager/utilities/filter/filterhandlertests.cpp branches/nscldaq-11.0-variablemanager/utilities/format/ branches/nscldaq-11.0-variablemanager/utilities/newscaler/figures/ branches/nscldaq-11.0-variablemanager/utilities/newscaler/sampleextension.tcl branches/nscldaq-11.0-variablemanager/utilities/newscaler/scalerdisplay_man.xml branches/nscldaq-11.0-variablemanager/utilities/newscaler/scalerdisplay_user.xml branches/nscldaq-11.0-variablemanager/utilities/newscaler/scalerdisplay_user_bookinfo.xml branches/nscldaq-11.0-variablemanager/utilities/newscaler/tclring_user.xml Removed Paths: ------------- branches/nscldaq-11.0-variablemanager/daq/format/CDataSink.h branches/nscldaq-11.0-variablemanager/daq/format/CDataSinkFactory.cpp branches/nscldaq-11.0-variablemanager/daq/format/CDataSinkFactory.h branches/nscldaq-11.0-variablemanager/daq/format/CDataSource.cpp branch... [truncated message content] |
From: <ro...@us...> - 2015-11-16 17:59:05
|
Revision: 5148 http://sourceforge.net/p/nscldaq/code/5148 Author: ron-fox Date: 2015-11-16 17:59:00 +0000 (Mon, 16 Nov 2015) Log Message: ----------- Commit after merge of 11.1-development branch with 11.0 head: * Initial conflict resolution * Good compilation and unit tests passed. Let's see what jenkins has to say about it. Modified Paths: -------------- trunk/main/ChangeLog trunk/main/base/Makefile.am trunk/main/base/dataflow/CRingBuffer.cpp trunk/main/base/headers/Makefile.am trunk/main/base/headers/Refptr.h trunk/main/base/thread/CBufferQueue.cpp trunk/main/base/thread/CBufferQueue.h trunk/main/configure.ac trunk/main/daq/actions/Actions.h trunk/main/daq/actions/Makefile.am trunk/main/daq/actions/TestActionPackage.cpp trunk/main/daq/eventbuilder/DuplicateTimestamp.tcl trunk/main/daq/eventbuilder/GUI.tcl trunk/main/daq/eventbuilder/fragment.h trunk/main/daq/eventbuilder/ringsource/CRingSource.cpp trunk/main/daq/eventbuilder/ringsource/CRingSource.h trunk/main/daq/eventbuilder/ringsource/Makefile.am trunk/main/daq/format/CRingItem.cpp trunk/main/daq/format/CRingItem.h trunk/main/daq/format/Makefile.am trunk/main/daq/format/ringitemtests.cpp trunk/main/daqsetup.bash.in trunk/main/epics/controlpush/Makefile.am trunk/main/simplesetups/vmusb/vmusbsetup.xml trunk/main/usb/ccusb/CTheApplication.cpp trunk/main/usb/ccusb/CTheApplication.h trunk/main/usb/ccusb/Makefile.am trunk/main/usb/ccusb/ccusb/Makefile.am trunk/main/usb/ccusb/controlpanels/Makefile.am trunk/main/usb/ccusb/core/Makefile.in trunk/main/usb/ccusb/daqconfig/Makefile.am trunk/main/usb/ccusb/devtests/Makefile.am trunk/main/usb/ccusb/driverkit/CCUSBDriverIncludes.in trunk/main/usb/ccusb/tcldrivers/ATrigger2367.tcl trunk/main/usb/ccusb/tclservertests/Makefile.am trunk/main/usb/ccusb/tclservertests/ctclmoduletest.cpp trunk/main/usb/ccusb/tclservertests/modulecommandtest.cpp trunk/main/usb/common/slowcontrols/CControlModuleT.h trunk/main/usb/common/slowcontrols/CControlModuleT.hpp trunk/main/usb/mesytec/MCFD16/MCFD16Control.tcl trunk/main/usb/mesytec/MCFD16/MCFD16Gui.tcl trunk/main/usb/mesytec/MCFD16/MCFD16GuiApp.tcl trunk/main/usb/mesytec/MCFD16/MCFD16USB.tcl trunk/main/usb/vmusb/CTheApplication.cpp trunk/main/usb/vmusb/CTheApplication.h trunk/main/usb/vmusb/Makefile.am trunk/main/usb/vmusb/daqconfig/CScalerCommand.cpp trunk/main/usb/vmusb/daqconfig/Makefile.am trunk/main/usb/vmusb/devtests/Makefile.am trunk/main/usb/vmusb/driverkit/VMUSBDriverIncludes.in trunk/main/usb/vmusb/tcldrivers/AGD16XLM72.tcl trunk/main/usb/vmusb/tclservertests/Makefile.am trunk/main/usb/vmusb/tclservertests/ctclcontrolmoduletest.cpp trunk/main/usb/vmusb/tclservertests/modulecommandtest.cpp trunk/main/utilities/Makefile.am trunk/main/utilities/bufdump/Makefile.am trunk/main/utilities/compatibility/Makefile.am trunk/main/utilities/filter/CAbnormalEndRunFilterHandler.cpp trunk/main/utilities/filter/CMediator.cpp trunk/main/utilities/filter/CMediator.h trunk/main/utilities/filter/Makefile.am trunk/main/utilities/filter/filtermaintests.cpp trunk/main/utilities/sclclient/Makefile.am Added Paths: ----------- trunk/main/11.1-conversion.config trunk/main/11.1-conversion.creator trunk/main/11.1-conversion.files trunk/main/11.1-conversion.includes trunk/main/base/headers/byte_cast.h trunk/main/base/headers/make_unique.h trunk/main/base/testutils/ trunk/main/daq/actions/Actions.cpp trunk/main/daq/eventbuilder/ringsource/CRingItemToFragmentTransform.cpp trunk/main/daq/eventbuilder/ringsource/CRingItemToFragmentTransform.h trunk/main/daq/eventbuilder/ringsource/TestRunner.cpp trunk/main/daq/eventbuilder/ringsource/cringsourcetests.cpp trunk/main/usb/ccusb/core/ trunk/main/usb/ccusb/ctlconfig/ trunk/main/usb/ccusb/daqconfig/Asserts.h trunk/main/usb/ccusb/daqconfig/CAD811.cpp trunk/main/usb/ccusb/daqconfig/CAD811.h trunk/main/usb/ccusb/daqconfig/CC1205.cpp trunk/main/usb/ccusb/daqconfig/CC1205.h trunk/main/usb/ccusb/daqconfig/CCAEN257.cpp trunk/main/usb/ccusb/daqconfig/CCAEN257.h trunk/main/usb/ccusb/daqconfig/CCCUSBModule.cpp trunk/main/usb/ccusb/daqconfig/CCCUSBModule.h trunk/main/usb/ccusb/daqconfig/CCamacCompat.hpp trunk/main/usb/ccusb/daqconfig/CCamacCrate.cpp trunk/main/usb/ccusb/daqconfig/CConfigurableObject.cpp trunk/main/usb/ccusb/daqconfig/CConfigurableObject.h trunk/main/usb/ccusb/daqconfig/CLRS2228.cpp trunk/main/usb/ccusb/daqconfig/CLRS2228.h trunk/main/usb/ccusb/daqconfig/CLRS2249.cpp trunk/main/usb/ccusb/daqconfig/CLRS2249.h trunk/main/usb/ccusb/daqconfig/CLRS2551.cpp trunk/main/usb/ccusb/daqconfig/CLRS2551.h trunk/main/usb/ccusb/daqconfig/CLeCroy4300B.cpp trunk/main/usb/ccusb/daqconfig/CLeCroy4434.cpp trunk/main/usb/ccusb/daqconfig/CMarker.cpp trunk/main/usb/ccusb/daqconfig/CMarker.h trunk/main/usb/ccusb/daqconfig/CPH7132.cpp trunk/main/usb/ccusb/daqconfig/CPH7132.h trunk/main/usb/ccusb/daqconfig/CPH7xx.cpp trunk/main/usb/ccusb/daqconfig/CPH7xx.h trunk/main/usb/ccusb/daqconfig/CReadoutHardware.cpp trunk/main/usb/ccusb/daqconfig/CReadoutHardware.h trunk/main/usb/ccusb/daqconfig/CReadoutModule.cpp trunk/main/usb/ccusb/daqconfig/CReadoutModule.h trunk/main/usb/ccusb/daqconfig/CStack.cpp trunk/main/usb/ccusb/daqconfig/CStack.h trunk/main/usb/ccusb/daqconfig/CTclModule.cpp trunk/main/usb/ccusb/daqconfig/CTclModule.h trunk/main/usb/ccusb/daqconfig/CULMTrigger.cpp trunk/main/usb/vmusb/core/ trunk/main/usb/vmusb/ctlconfig/ trunk/main/usb/vmusb/daqconfig/C3804.cpp trunk/main/usb/vmusb/daqconfig/C3804.h trunk/main/usb/vmusb/daqconfig/C3820.cpp trunk/main/usb/vmusb/daqconfig/C3820.h trunk/main/usb/vmusb/daqconfig/C785.cpp trunk/main/usb/vmusb/daqconfig/C785.h trunk/main/usb/vmusb/daqconfig/C830.cpp trunk/main/usb/vmusb/daqconfig/C830.h trunk/main/usb/vmusb/daqconfig/CCAENChain.cpp trunk/main/usb/vmusb/daqconfig/CCAENChain.h trunk/main/usb/vmusb/daqconfig/CCAENV1x90Opcodes.h trunk/main/usb/vmusb/daqconfig/CCAENV1x90Registers.h trunk/main/usb/vmusb/daqconfig/CCBD8210CamacBranchDriver.cpp trunk/main/usb/vmusb/daqconfig/CCBD8210CamacBranchDriver.h trunk/main/usb/vmusb/daqconfig/CCBD8210CrateController.cpp trunk/main/usb/vmusb/daqconfig/CCBD8210CrateController.h trunk/main/usb/vmusb/daqconfig/CCBD8210ReadoutList.cpp trunk/main/usb/vmusb/daqconfig/CCBD8210ReadoutList.h trunk/main/usb/vmusb/daqconfig/CCBDCamacBranch.cpp trunk/main/usb/vmusb/daqconfig/CCBDCamacBranch.h trunk/main/usb/vmusb/daqconfig/CCamacCompat.hpp trunk/main/usb/vmusb/daqconfig/CCamacCrate.cpp trunk/main/usb/vmusb/daqconfig/CDelay.cpp trunk/main/usb/vmusb/daqconfig/CDelay.h trunk/main/usb/vmusb/daqconfig/CHINP.cpp trunk/main/usb/vmusb/daqconfig/CHINP.h trunk/main/usb/vmusb/daqconfig/CHiRA.cpp trunk/main/usb/vmusb/daqconfig/CHiRA.h trunk/main/usb/vmusb/daqconfig/CLeCroy2551.cpp trunk/main/usb/vmusb/daqconfig/CLeCroy4300B.cpp trunk/main/usb/vmusb/daqconfig/CLeCroy4434.cpp trunk/main/usb/vmusb/daqconfig/CMADC32.cpp trunk/main/usb/vmusb/daqconfig/CMADC32.h trunk/main/usb/vmusb/daqconfig/CMADCChain.cpp trunk/main/usb/vmusb/daqconfig/CMADCChain.h trunk/main/usb/vmusb/daqconfig/CMADCScaler.cpp trunk/main/usb/vmusb/daqconfig/CMADCScaler.h trunk/main/usb/vmusb/daqconfig/CMASE.cpp trunk/main/usb/vmusb/daqconfig/CMASE.h trunk/main/usb/vmusb/daqconfig/CMQDC32RdoHdwr.cpp trunk/main/usb/vmusb/daqconfig/CMQDC32RdoHdwr.h trunk/main/usb/vmusb/daqconfig/CMQDC32StackBuilder.cpp trunk/main/usb/vmusb/daqconfig/CMQDC32StackBuilder.h trunk/main/usb/vmusb/daqconfig/CMTDC32.cpp trunk/main/usb/vmusb/daqconfig/CMTDC32.h trunk/main/usb/vmusb/daqconfig/CMarker.cpp trunk/main/usb/vmusb/daqconfig/CMarker.h trunk/main/usb/vmusb/daqconfig/CMesytecBase.cpp trunk/main/usb/vmusb/daqconfig/CMesytecBase.h trunk/main/usb/vmusb/daqconfig/CNADC2530.cpp trunk/main/usb/vmusb/daqconfig/CNADC2530.h trunk/main/usb/vmusb/daqconfig/CPSD.cpp trunk/main/usb/vmusb/daqconfig/CPSD.h trunk/main/usb/vmusb/daqconfig/CReadoutHardware.h trunk/main/usb/vmusb/daqconfig/CReadoutModule.cpp trunk/main/usb/vmusb/daqconfig/CReadoutModule.h trunk/main/usb/vmusb/daqconfig/CStack.cpp trunk/main/usb/vmusb/daqconfig/CStack.h trunk/main/usb/vmusb/daqconfig/CTclModule.cpp trunk/main/usb/vmusb/daqconfig/CTclModule.h trunk/main/usb/vmusb/daqconfig/CULMTrigger.cpp trunk/main/usb/vmusb/daqconfig/CV1495sc.cpp trunk/main/usb/vmusb/daqconfig/CV1495sc.h trunk/main/usb/vmusb/daqconfig/CV1729.cpp trunk/main/usb/vmusb/daqconfig/CV1729.h trunk/main/usb/vmusb/daqconfig/CV1x90.cpp trunk/main/usb/vmusb/daqconfig/CV1x90.h trunk/main/usb/vmusb/daqconfig/CV977.cpp trunk/main/usb/vmusb/daqconfig/CV977.h trunk/main/usb/vmusb/daqconfig/CVMUSBControl.cpp trunk/main/usb/vmusb/daqconfig/CVMUSBControl.h trunk/main/usb/vmusb/daqconfig/CXLM.cpp trunk/main/usb/vmusb/daqconfig/CXLM.h trunk/main/usb/vmusb/daqconfig/CXLMFERA.cpp trunk/main/usb/vmusb/daqconfig/CXLMFERA.h trunk/main/usb/vmusb/daqconfig/CXLMTimestamp.cpp trunk/main/usb/vmusb/daqconfig/CXLMTimestamp.h trunk/main/usb/vmusb/daqconfig/MADC32Registers.h trunk/main/usb/vmusb/daqconfig/MQDC32Registers.h trunk/main/usb/vmusb/daqconfig/c3820test.cpp trunk/main/usb/vmusb/daqconfig/c785test.cpp trunk/main/usb/vmusb/daqconfig/configtest.cpp trunk/main/utilities/Buffer/ trunk/main/utilities/FormattedIO/ trunk/main/utilities/IO/ trunk/main/utilities/conversion/ trunk/main/utilities/filter/CBaseMediator.cpp trunk/main/utilities/filter/CBaseMediator.h trunk/main/utilities/filter/CBufferDecoder.cpp trunk/main/utilities/filter/CBufferDecoder.h trunk/main/utilities/filter/CBufferIO.cpp trunk/main/utilities/filter/CBufferIO.h trunk/main/utilities/filter/CEventFormatError.cpp trunk/main/utilities/filter/CEventFormatError.h trunk/main/utilities/filter/CFakeMediator.cpp trunk/main/utilities/filter/CFakeMediator.h trunk/main/utilities/filter/CRunStatistics.cpp trunk/main/utilities/filter/CRunStatistics.h trunk/main/utilities/filter/SatisfyTclPlus.cpp trunk/main/utilities/filter/filterhandlertests.cpp trunk/main/utilities/filter/infinitemediatortests.cpp trunk/main/utilities/format/ Removed Paths: ------------- trunk/main/daq/eventbuilder/ringsource/options.ggo trunk/main/daq/format/CDataSink.h trunk/main/daq/format/CDataSinkException.cpp trunk/main/daq/format/CDataSinkException.h trunk/main/daq/format/CDataSinkFactory.cpp trunk/main/daq/format/CDataSinkFactory.h trunk/main/daq/format/CDataSource.cpp trunk/main/daq/format/CDataSource.h trunk/main/daq/format/CDataSourceFactory.cpp trunk/main/daq/format/CDataSourceFactory.h trunk/main/daq/format/CFakeDataSource.cpp trunk/main/daq/format/CFakeDataSource.h trunk/main/daq/format/CFileDataSink.cpp trunk/main/daq/format/CFileDataSink.h trunk/main/daq/format/CFileDataSource.cpp trunk/main/daq/format/CFileDataSource.h trunk/main/daq/format/CLoggingDataSink.cpp trunk/main/daq/format/CLoggingDataSink.h trunk/main/daq/format/CRingDataSink.cpp trunk/main/daq/format/CRingDataSink.h trunk/main/daq/format/CRingDataSource.cpp trunk/main/daq/format/CRingDataSource.h trunk/main/daq/format/datasinkfactorytests.cpp trunk/main/daq/format/datasourcefactorytests.cpp trunk/main/daq/format/filedatasinktests.cpp trunk/main/daq/format/ringdatasinktests.cpp trunk/main/epics/controlpush/cmdline.h trunk/main/usb/ccusb/daqconfig/CScalerCommand.cpp trunk/main/usb/ccusb/daqconfig/CScalerCommand.h trunk/main/usb/ccusb/threadcomm/ trunk/main/usb/vmusb/threadcomm/ trunk/main/utilities/filter/infinitemediatortests.cpp Property Changed: ---------------- trunk/main/ trunk/main/base/thread/ trunk/main/daq/eventbuilder/ringsource/ trunk/main/daq/readoutgui/multilogger.tcl trunk/main/sbs/vmemodules/CModule32.h trunk/main/sbs/vmemodules/CSIS3820.h trunk/main/usb/ccusb/devices/CConfigurableObject.cpp trunk/main/usb/ccusb/router/COutputThread.cpp trunk/main/usb/common/configurableobject/CConfigurableObject.cpp trunk/main/usb/vmusb/daqconfig/CConfiguration.cpp trunk/main/usb/vmusb/daqconfig/Makefile.am Index: trunk/main =================================================================== --- trunk/main 2015-11-16 12:35:27 UTC (rev 5147) +++ trunk/main 2015-11-16 17:59:00 UTC (rev 5148) Property changes on: trunk/main ___________________________________________________________________ Modified: svn:mergeinfo ## -1,9 +1,11 ## /branches/11.0-s800conv-development:3453-4324 /branches/11.0-s800conv-fixes:4745-4796 +/branches/11.1-conversion-dev:4802-5090 /branches/feature-EVBMonitorThread:5008-5019 /branches/feature-Post-GRETINA-Testrun:5034-5142 /branches/features-nscldaq-11.0-014:5026-5066 /branches/hira-sisstuff:2744-2997 +/branches/merge-devices-daqconfig:4697-4702 /branches/nextgen-ccusb-feature:2631-2641 /branches/nextgen-ccusb-userdrivers-feature:2644-2659 /branches/nextgen-vmusb-userdrivers-feature:2665-2711 ## -20,6 +22,7 ## /branches/nscldaq-11.0-rc16:4105-4159 /branches/nscldaq-11.0-rc17-development:4301-4372 /branches/nscldaq-11.0-rc18:4395-4453 +/branches/nscldaq-11.1-development:4702-5145 /branches/nscldaq-11.x-mqdc:4448-4549 /branches/revert-main:4668-4675 /branches/vmusbremote-development:2803 \ No newline at end of property Copied: trunk/main/11.1-conversion.config (from rev 5145, branches/nscldaq-11.1-development/11.1-conversion.config) =================================================================== --- trunk/main/11.1-conversion.config (rev 0) +++ trunk/main/11.1-conversion.config 2015-11-16 17:59:00 UTC (rev 5148) @@ -0,0 +1 @@ +// ADD PREDEFINED MACROS HERE! Copied: trunk/main/11.1-conversion.creator (from rev 5145, branches/nscldaq-11.1-development/11.1-conversion.creator) =================================================================== --- trunk/main/11.1-conversion.creator (rev 0) +++ trunk/main/11.1-conversion.creator 2015-11-16 17:59:00 UTC (rev 5148) @@ -0,0 +1 @@ +[General] Copied: trunk/main/11.1-conversion.files (from rev 5145, branches/nscldaq-11.1-development/11.1-conversion.files) =================================================================== --- trunk/main/11.1-conversion.files (rev 0) +++ trunk/main/11.1-conversion.files 2015-11-16 17:59:00 UTC (rev 5148) @@ -0,0 +1,2672 @@ +base/bltsubst/graph.tcl +base/bltsubst/librbc0.1.so-32 +base/bltsubst/librbc0.1.so-64 +base/bltsubst/Makefile.am +base/bltsubst/pkgIndex.tcl +base/bltsubst/rbcCanvEps.pro +base/bltsubst/rbcGraph.pro +base/bltsubst/stripchart.tcl +base/bltsubst/tabset.tcl +base/bltsubst/vector.tcl +base/bltsubst/vector.test +base/CopyrightTools/addlicense.tcl +base/CopyrightTools/addtcllicense.tcl +base/CopyrightTools/build.sh +base/CopyrightTools/CopyrightNotice.cpp +base/CopyrightTools/CopyrightNotice.h +base/CopyrightTools/copyrightnotice.xml +base/CopyrightTools/License.tcl +base/CopyrightTools/License.txt +base/CopyrightTools/Makefile.am +base/CopyrightTools/test.cpp +base/cvt/cvtdoc.xml +base/cvt/daqcvt.c +base/cvt/daqcvt.h +base/cvt/Makefile.am +base/dataflow/Asserts.h +base/dataflow/BlockingTests.cpp +base/dataflow/consumer.cpp +base/dataflow/CRemoteAccess.cpp +base/dataflow/CRemoteAccess.h +base/dataflow/CRingBuffer.cpp +base/dataflow/CRingBuffer.h +base/dataflow/CRingCommand.cpp +base/dataflow/CRingCommand.h +base/dataflow/CRingMaster.cpp +base/dataflow/CRingMaster.h +base/dataflow/crmastertests.cpp +base/dataflow/DifferenceTests.cpp +base/dataflow/InfoTests.cpp +base/dataflow/Makefile.am +base/dataflow/ManageTest.cpp +base/dataflow/producer.cpp +base/dataflow/RemoteTests.cpp +base/dataflow/ringbuffer.tcl +base/dataflow/ringbuffer_man.xml +base/dataflow/ringbuffer_user.xml +base/dataflow/ringbufint.h +base/dataflow/ringlib.xml +base/dataflow/RingMaster.tcl +base/dataflow/ringmaster.xml +base/dataflow/ringPackage.cpp +base/dataflow/ringpipes.xml +base/dataflow/ringprimitives.xml +base/dataflow/ringtostdout.cpp +base/dataflow/ringtostdoutsw.ggo +base/dataflow/StaticTests.cpp +base/dataflow/stdintoring.cpp +base/dataflow/stdintoringsw.ggo +base/dataflow/tclring.xml +base/dataflow/testcommon.cpp +base/dataflow/testcommon.h +base/dataflow/TestRunner.cpp +base/dataflow/TransferTests.cpp +base/dataflow/WhilePredTest.cpp +base/headers/buffer.h +base/headers/buftypes.h +base/headers/daqdatatypes.h +base/headers/DesignByContract.h +base/headers/fdstream.h +base/headers/Makefile.am +base/headers/Refptr.h +base/headers/VMEAddressModifier.h +base/os/Asserts.h +base/os/attachTests.cpp +base/os/createTests.cpp +base/os/daqshm.cpp +base/os/daqshm.h +base/os/detachTests.cpp +base/os/io.cpp +base/os/io.h +base/os/Makefile.am +base/os/os.cpp +base/os/os.h +base/os/removeTests.cpp +base/os/shm.xml +base/os/TestRunner.cpp +base/plotchart/ChangeLog +base/plotchart/Makefile.am +base/plotchart/pkgIndex.tcl +base/plotchart/plot3d.tcl +base/plotchart/plotanim.tcl +base/plotchart/plotannot.tcl +base/plotchart/plotaxis.tcl +base/plotchart/plotbind.tcl +base/plotchart/plotbusiness.tcl +base/plotchart/plotchart.man +base/plotchart/plotchart.tcl +base/plotchart/plotcombined.tcl +base/plotchart/plotconfig.tcl +base/plotchart/plotcontour.tcl +base/plotchart/plotgantt.tcl +base/plotchart/plotobject.tcl +base/plotchart/plotpack.tcl +base/plotchart/plotpriv.tcl +base/plotchart/plotscada.tcl +base/plotchart/plotspecial.tcl +base/plotchart/plottable.tcl +base/plotchart/scaling.tcl +base/plotchart/scope.tcl +base/plotchart/scope3.tcl +base/plotchart/test_axis.tcl +base/plotchart/xyplot.tcl +base/plotcontainer/Makefile.am +base/plotcontainer/marker.tcl +base/plotcontainer/pkgIndex.tcl +base/plotcontainer/plotcontainer.xml +base/plotcontainer/series.tcl +base/plotcontainer/series.test +base/plotcontainer/xyplot.tcl +base/security/AccessListCheck.cpp +base/security/AccessListCheck.h +base/security/Authenticator.h +base/security/FdInteractor.cpp +base/security/FdInteractor.h +base/security/HostListCheck.cpp +base/security/HostListCheck.h +base/security/Interactor.cpp +base/security/Interactor.h +base/security/IOInteractor.cpp +base/security/IOInteractor.h +base/security/Makefile.am +base/security/PasswordCheck.cpp +base/security/PasswordCheck.h +base/security/security.xml +base/security/StringInteractor.cpp +base/security/StringInteractor.h +base/security/TclAccessListCheck.cpp +base/security/TclAccessListCheck.h +base/security/test.cpp +base/security/UnixUserCheck.cpp +base/security/UnixUserCheck.h +base/tclutils/BlockCompleter.tcl +base/tclutils/blockcompleter.test +base/tclutils/Makefile.am +base/tclutils/TclSourceFilter.tcl +base/tclutils/tclsourcefilter.test +base/tclutils/tclTests.tcl +base/tclutils/Utils.tcl +base/tclutils/utils.test +base/tclwidgets/ChannelLabel.tcl +base/tclwidgets/channellabel.test +base/tclwidgets/FrameManager.tcl +base/tclwidgets/framemanager.test +base/tclwidgets/FrameSequencer.tcl +base/tclwidgets/framesequencer.test +base/tclwidgets/Makefile.am +base/tclwidgets/mwutil.tcl +base/tclwidgets/notebook.tcl +base/tclwidgets/ReDistribNotes +base/tclwidgets/RingStatus.tcl +base/tclwidgets/RingStatus.xml +base/tclwidgets/tablelist.tcl +base/tclwidgets/tablelistSortByColumn.tcl +base/tclwidgets/tablelistWidget.tcl +base/tclwidgets/tabnbook.tcl +base/tclwidgets/tclTests.tcl +base/tclwidgets/TransientLabel.tcl +base/tclwidgets/transientlabel.test +base/tcpip/CSocket.cpp +base/tcpip/CSocket.h +base/tcpip/CTCPBadSocketState.cpp +base/tcpip/CTCPBadSocketState.h +base/tcpip/CTCPConnectionFailed.cpp +base/tcpip/CTCPConnectionFailed.h +base/tcpip/CTCPConnectionLost.cpp +base/tcpip/CTCPConnectionLost.h +base/tcpip/CTCPNoSuchHost.cpp +base/tcpip/CTCPNoSuchHost.h +base/tcpip/CTCPNoSuchService.cpp +base/tcpip/CTCPNoSuchService.h +base/tcpip/Makefile.am +base/thread/CBufferQueue.cpp +base/thread/CBufferQueue.h +base/thread/CCondition.cpp +base/thread/CCondition.h +base/thread/CGaurdedObject.cpp +base/thread/CGaurdedObject.h +base/thread/CMutex.cpp +base/thread/CMutex.h +base/thread/CSynchronizedThread.cpp +base/thread/CSynchronizedThread.h +base/thread/dshwrappthreads.cpp +base/thread/dshwrappthreads.h +base/thread/dshwrapthreads.h +base/thread/Makefile.am +base/thread/Runnable.h +base/thread/SyncGuard.cpp +base/thread/SyncGuard.h +base/thread/Synchronizable.cpp +base/thread/Synchronizable.h +base/thread/Thread.cpp +base/thread/Thread.h +base/thread/thread.xml +base/uri/Makefile.am +base/uri/URL.cpp +base/uri/URL.h +base/uri/URL.xml +caenfw-common/CAENComm.h +caenfw-common/CAENComm_Common.cpp +caenfw-common/caenfwloaders.xml +caenfw-common/CFASegment.c +caenfw-common/CFASegment.h +caenfw-common/cvupgrade.c +caenfw-common/CVupgrade_params_Digitizers.txt +caenfw-common/CVupgrade_params_Digitizers_PLL.txt +caenfw-common/CVupgrade_params_SY2791.txt +caenfw-common/CVupgrade_params_V1190_V1290.txt +caenfw-common/CVupgrade_params_V1495_USER.txt +caenfw-common/CVupgrade_params_V1495_VME.txt +caenfw-common/CVupgrade_params_V6533.txt +caenfw-common/flash.c +caenfw-common/flash.h +caenfw-common/Makefile.am +caenfw-common/V1720_template.txt +caenfw-common/V1721_template.txt +caenfw-common/V1724_template.txt +caenfw-common/V1731_template.txt +caenfw-common/V1740_template.txt +caenfw-common/V1751_template.txt +daq/actions/Actions.h +daq/actions/actions.tcl +daq/actions/actions.test +daq/actions/actions.xml +daq/actions/defaultActions.tcl +daq/actions/Makefile.am +daq/actions/tclTests.tcl +daq/eventbuilder/glom/glom.ggo +daq/eventbuilder/glom/glom.xml +daq/eventbuilder/glom/glomMain.cpp +daq/eventbuilder/glom/Makefile.am +daq/eventbuilder/offlineorderer/figures/OfflineEVB-GlobalConfig-1.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-GlobalConfig-2.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-GlobalConfigOutput-1.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-GlobalConfigOutput-2.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-HowToCreateJob-0.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-HowToCreateJob-1.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-HowToCreateJob-2.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-HowToCreateJob-3.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-HowToCreateJob-4.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-HowToCreateJob-5.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-HowToCreateJob-6.png +daq/eventbuilder/offlineorderer/figures/OfflineEVB-HowToCreateJob-9.png +daq/eventbuilder/offlineorderer/figures/OfflineEVBJobBuilder.png +daq/eventbuilder/offlineorderer/ConfigurationErrorUI.tcl +daq/eventbuilder/offlineorderer/FileListWidget.tcl +daq/eventbuilder/offlineorderer/filelistwidget.test +daq/eventbuilder/offlineorderer/globalconfig.test +daq/eventbuilder/offlineorderer/GlobalConfigUI.tcl +daq/eventbuilder/offlineorderer/HoistPipeline.tcl +daq/eventbuilder/offlineorderer/hoistpipeline.test +daq/eventbuilder/offlineorderer/InputPipeline.tcl +daq/eventbuilder/offlineorderer/inputpipeline.test +daq/eventbuilder/offlineorderer/Job.tcl +daq/eventbuilder/offlineorderer/job.test +daq/eventbuilder/offlineorderer/JobBuilderUI.tcl +daq/eventbuilder/offlineorderer/jobbuilderui.test +daq/eventbuilder/offlineorderer/JobConfigUI.tcl +daq/eventbuilder/offlineorderer/JobProcessor.tcl +daq/eventbuilder/offlineorderer/jobprocessor.test +daq/eventbuilder/offlineorderer/Makefile.am +daq/eventbuilder/offlineorderer/MissingSourceUI.tcl +daq/eventbuilder/offlineorderer/offlineorderer.tcl +daq/eventbuilder/offlineorderer/OfflineOrderer.xml +daq/eventbuilder/offlineorderer/OfflineOrdererUI.tcl +daq/eventbuilder/offlineorderer/OutputPipeline.tcl +daq/eventbuilder/offlineorderer/outputpipeline.test +daq/eventbuilder/offlineorderer/RunProcessor.tcl +daq/eventbuilder/offlineorderer/runprocessor.test +daq/eventbuilder/offlineorderer/RunStatusUI.tcl +daq/eventbuilder/offlineorderer/runstatusui.test +daq/eventbuilder/offlineorderer/tclTests.tcl +daq/eventbuilder/ringsource/CRingSource.cpp +daq/eventbuilder/ringsource/CRingSource.h +daq/eventbuilder/ringsource/GetOpt.cpp +daq/eventbuilder/ringsource/GetOpt.h +daq/eventbuilder/ringsource/gretinaTimestamp.c +daq/eventbuilder/ringsource/Main.cpp +daq/eventbuilder/ringsource/Makefile.am +daq/eventbuilder/ringsource/options.ggo +daq/eventbuilder/ringsource/ringsource.xml +daq/eventbuilder/ringsource/ringtestoptions.ggo +daq/eventbuilder/ringsource/ringTestSource.cpp +daq/eventbuilder/ringsource/s800.h +daq/eventbuilder/ringsource/s800timestamp.c +daq/eventbuilder/ringsource/TestSource.cpp +daq/eventbuilder/ringsource/TestSource.h +daq/eventbuilder/ringsource/testTimeExtractor.c +daq/eventbuilder/teering/Makefile.am +daq/eventbuilder/teering/options.ggo +daq/eventbuilder/teering/teering.cpp +daq/eventbuilder/teering/teering.xml +daq/eventbuilder/unglom/cmdline.ggo +daq/eventbuilder/unglom/Makefile.am +daq/eventbuilder/unglom/unglom.cpp +daq/eventbuilder/unglom/unglom.xml +daq/eventbuilder/api.xml +daq/eventbuilder/Asserts.h +daq/eventbuilder/barriers.tcl +daq/eventbuilder/callbackManager.tcl +daq/eventbuilder/CBarrierStats.cpp +daq/eventbuilder/CBarrierStats.h +daq/eventbuilder/CBarrierStatsCommand.cpp +daq/eventbuilder/CBarrierStatsCommand.h +daq/eventbuilder/CBarrierTraceCommand.cpp +daq/eventbuilder/CBarrierTraceCommand.h +daq/eventbuilder/cbmanagerTests.test +daq/eventbuilder/CCompleteBarrierCallback.cpp +daq/eventbuilder/CCompleteBarrierCallback.h +daq/eventbuilder/CConfigure.cpp +daq/eventbuilder/CConfigure.h +daq/eventbuilder/CDataLateStatistics.cpp +daq/eventbuilder/CDataLateStatistics.h +daq/eventbuilder/CDeadSourceCommand.cpp +daq/eventbuilder/CDeadSourceCommand.h +daq/eventbuilder/CDLateStatsCommand.cpp +daq/eventbuilder/CDLateStatsCommand.h +daq/eventbuilder/CDropSourcesCommand.cpp +daq/eventbuilder/CDropSourcesCommand.h +daq/eventbuilder/CDuplicateTimeStatCommand.cpp +daq/eventbuilder/CDuplicateTimeStatCommand.h +daq/eventbuilder/CEVBClientApp.cpp +daq/eventbuilder/CEVBClientApp.h +daq/eventbuilder/CEVBClientFramework.cpp +daq/eventbuilder/CEVBFrameworkApp.cpp +daq/eventbuilder/CEVBFrameworkApp.h +daq/eventbuilder/CEventOrderClient.cpp +daq/eventbuilder/CEventOrderClient.h +daq/eventbuilder/CFlushCommand.cpp +daq/eventbuilder/CFlushCommand.h +daq/eventbuilder/CFragmentHandler.cpp +daq/eventbuilder/CFragmentHandler.h +daq/eventbuilder/CFragmentHandlerCommand.cpp +daq/eventbuilder/CFragmentHandlerCommand.h +daq/eventbuilder/CFragReader.cpp +daq/eventbuilder/CFragReader.h +daq/eventbuilder/CFragWriter.cpp +daq/eventbuilder/CFragWriter.h +daq/eventbuilder/CIncompleteBarrierStats.cpp +daq/eventbuilder/CIncompleteBarrierStats.h +daq/eventbuilder/CInputStatsCommand.cpp +daq/eventbuilder/CInputStatsCommand.h +daq/eventbuilder/CLateScriptObserver.cpp +daq/eventbuilder/CLateScriptObserver.h +daq/eventbuilder/cmanagerCallbacks.test +daq/eventbuilder/configcmdtests.cpp +daq/eventbuilder/COnLateDataCommand.cpp +daq/eventbuilder/COnLateDataCommand.h +daq/eventbuilder/connectionList.tcl +daq/eventbuilder/ConnectionManager.tcl +daq/eventbuilder/connectTest.cpp +daq/eventbuilder/COrdererOutput.cpp +daq/eventbuilder/COrdererOutput.h +daq/eventbuilder/COutOfOrderTraceCommand.cpp +daq/eventbuilder/COutOfOrderTraceCommand.h +daq/eventbuilder/COutputStatsCommand.cpp +daq/eventbuilder/COutputStatsCommand.h +daq/eventbuilder/COutputStatsObserver.cpp +daq/eventbuilder/COutputStatsObserver.h +daq/eventbuilder/CPartialBarrierCallback.cpp +daq/eventbuilder/CPartialBarrierCallback.h +daq/eventbuilder/CResetCommand.cpp +daq/eventbuilder/CResetCommand.h +daq/eventbuilder/CReviveSocketCommand.cpp +daq/eventbuilder/CReviveSocketCommand.h +daq/eventbuilder/CSourceCommand.cpp +daq/eventbuilder/CSourceCommand.h +daq/eventbuilder/CXonXOffCallbackCommand.cpp +daq/eventbuilder/CXonXOffCallbackCommand.h +daq/eventbuilder/disconnectTest.cpp +daq/eventbuilder/DuplicateTimestamp.tcl +daq/eventbuilder/duptscmdtest.cpp +daq/eventbuilder/EVBFramework.cpp +daq/eventbuilder/EVBFramework.h +daq/eventbuilder/evbRdoCallouts.tcl +daq/eventbuilder/evbrdocallouts.test +daq/eventbuilder/evbRdoCallouts10.tcl +daq/eventbuilder/evbrdocallouts10.test +daq/eventbuilder/EVBStateCallouts.tcl +daq/eventbuilder/eventbuilder.kpf +daq/eventbuilder/eventbuilder_user.xml +daq/eventbuilder/eventOrderer.tcl +daq/eventbuilder/frag2ring.cpp +daq/eventbuilder/frag2ring.xml +daq/eventbuilder/fragio.cpp +daq/eventbuilder/fragio.h +daq/eventbuilder/fragment.c +daq/eventbuilder/fragment.h +daq/eventbuilder/GetOpt.cpp +daq/eventbuilder/GetOpt.h +daq/eventbuilder/GUI.tcl +daq/eventbuilder/inputStatistics.tcl +daq/eventbuilder/late.tcl +daq/eventbuilder/latePopup.tcl +daq/eventbuilder/lookupTest.cpp +daq/eventbuilder/Main.cpp +daq/eventbuilder/Makefile.am +daq/eventbuilder/observer.tcl +daq/eventbuilder/options.ggo +daq/eventbuilder/orderer.xml +daq/eventbuilder/OrdererPackage.cpp +daq/eventbuilder/orderTests.cpp +daq/eventbuilder/OutOfOrderUI.tcl +daq/eventbuilder/outputStatistics.tcl +daq/eventbuilder/protocol.xml +daq/eventbuilder/rdocalloutsSpec.txt +daq/eventbuilder/ringSourceMgr.tcl +daq/eventbuilder/ringsourcemgr.test +daq/eventbuilder/startOrderer.in +daq/eventbuilder/tclflowtest.cpp +daq/eventbuilder/tclTests.tcl +daq/eventbuilder/TestRunner.cpp +daq/eventbuilder/utility.tcl +daq/format/allbuttests.cpp +daq/format/Asserts.h +daq/format/CAbnormalEndItem.cpp +daq/format/CAbnormalEndItem.h +daq/format/CAllButPredicate.cpp +daq/format/CAllButPredicate.h +daq/format/CDataFormatItem.cpp +daq/format/CDataFormatItem.h +daq/format/CDataSink.h +daq/format/CDataSinkException.cpp +daq/format/CDataSinkException.h +daq/format/CDataSinkFactory.cpp +daq/format/CDataSinkFactory.h +daq/format/CDataSource.cpp +daq/format/CDataSource.h +daq/format/CDataSourceFactory.cpp +daq/format/CDataSourceFactory.h +daq/format/CDesiredTypesPredicate.cpp +daq/format/CDesiredTypesPredicate.h +daq/format/CFakeDataSource.cpp +daq/format/CFakeDataSource.h +daq/format/CFileDataSink.cpp +daq/format/CFileDataSink.h +daq/format/CFileDataSource.cpp +daq/format/CFileDataSource.h +daq/format/CGlomParameters.cpp +daq/format/CGlomParameters.h +daq/format/CLoggingDataSink.cpp +daq/format/CLoggingDataSink.h +daq/format/CPhysicsEventItem.cpp +daq/format/CPhysicsEventItem.h +daq/format/CRingDataSink.cpp +daq/format/CRingDataSink.h +daq/format/CRingDataSource.cpp +daq/format/CRingDataSource.h +daq/format/CRingFragmentItem.cpp +daq/format/CRingFragmentItem.h +daq/format/CRingItem.cpp +daq/format/CRingItem.h +daq/format/CRingItemFactory.cpp +daq/format/CRingItemFactory.h +daq/format/CRingPhysicsEventCountItem.cpp +daq/format/CRingPhysicsEventCountItem.h +daq/format/CRingScaler.cpp +daq/format/CRingScalerItem.cpp +daq/format/CRingScalerItem.h +daq/format/CRingSelectionPredicate.cpp +daq/format/CRingSelectionPredicate.h +daq/format/CRingStateChangeItem.cpp +daq/format/CRingStateChangeItem.h +daq/format/CRingTextItem.cpp +daq/format/CRingTextItem.h +daq/format/CUnknownFragment.cpp +daq/format/CUnknownFragment.h +daq/format/DataFormat.h +daq/format/dataformat_dev.xml +daq/format/dataformat_user.xml +daq/format/dataformattests.cpp +daq/format/DataFormatV11.h +daq/format/datasinkfactorytests.cpp +daq/format/datasourcefactorytests.cpp +daq/format/desiredtests.cpp +daq/format/factorytests.cpp +daq/format/filedatasinktests.cpp +daq/format/formatoutputtests.cpp +daq/format/fragmenttest.cpp +daq/format/glomparamtests.cpp +daq/format/Makefile.am +daq/format/physcounttests.cpp +daq/format/physeventtests.cpp +daq/format/ringdatasinktests.cpp +daq/format/ringitem.c +daq/format/RingItemComparisons.cpp +daq/format/RingItemComparisons.h +daq/format/ringitemtests.cpp +daq/format/scalertests.cpp +daq/format/selecttest.cpp +daq/format/TestRunner.cpp +daq/format/teststate.cpp +daq/format/texttest.cpp +daq/readoutgui/old/daqparameters.test +daq/readoutgui/old/directories.test +daq/readoutgui/old/Experiment.tcl +daq/readoutgui/old/experiment.test +daq/readoutgui/old/Monitor.tcl +daq/readoutgui/old/rdostate.test +daq/readoutgui/old/ReadougGUIPanel.tcl +daq/readoutgui/old/ReadougGUIPanel.ui +daq/readoutgui/old/ReadougGUIPanel_ui.tcl +daq/readoutgui/old/ReadoutControl.tcl +daq/readoutgui/old/ReadoutGui.tcl +daq/readoutgui/old/ReadoutShell.tcl +daq/readoutgui/old/ReadoutState.tcl +daq/readoutgui/old/RemoteInfo.tcl +daq/readoutgui/old/RunTime.tcl +daq/readoutgui/old/scalerParameterDialog.tcl +daq/readoutgui/old/scalerParameterDialog.ui +daq/readoutgui/old/scalerParameterDialog_ui.tcl +daq/readoutgui/old/ScalerParameterGUI.tcl +daq/readoutgui/old/selectReadout.tcl +daq/readoutgui/old/selectReadout.ui +daq/readoutgui/old/selectReadout_ui.tcl +daq/readoutgui/old/selectReadoutDialog.tcl +daq/readoutgui/bells.tcl +daq/readoutgui/Configuration.tcl +daq/readoutgui/DAQParameters.tcl +daq/readoutgui/DataSourceManager.tcl +daq/readoutgui/DataSourceMonitor.tcl +daq/readoutgui/DataSourceUI.tcl +daq/readoutgui/delayProvider.tcl +daq/readoutgui/delayprovider.test +daq/readoutgui/directories.tcl +daq/readoutgui/dsourcemgr.test +daq/readoutgui/error.png +daq/readoutgui/eventlog.test +daq/readoutgui/eventLogBundle.tcl +daq/readoutgui/eventlogsettings.eps +daq/readoutgui/eventlogsettings.jpg +daq/readoutgui/ExpFileSystemConfig.tcl +daq/readoutgui/filesystem.test +daq/readoutgui/initconfig.test +daq/readoutgui/InitializeConfiguration.tcl +daq/readoutgui/installpkg +daq/readoutgui/InstallRoot.tcl.in +daq/readoutgui/installroot.test +daq/readoutgui/Makefile.am +daq/readoutgui/new Run State.graphml +daq/readoutgui/offlineProvider.tcl +daq/readoutgui/offlineprovider.test +daq/readoutgui/OS.tcl +daq/readoutgui/ostest.test +daq/readoutgui/rdocallouts.test +daq/readoutgui/rdoCalloutsBundle.tcl +daq/readoutgui/ReadoutGui.tcl +daq/readoutgui/readoutgui_man.xml +daq/readoutgui/readoutgui_user.xml +daq/readoutgui/ReadoutGuiClient.tcl +daq/readoutgui/readoutGuiProvider.tcl +daq/readoutgui/readoutguitest.tk +daq/readoutgui/ReadoutShell +daq/readoutgui/readoutshell.eps +daq/readoutgui/readoutshell.jpg +daq/readoutgui/ReadoutShell.tcl.in +daq/readoutgui/remoteControl.tcl +daq/readoutgui/remotecontrol.test +daq/readoutgui/rsh.tcl +daq/readoutgui/rstatemachine.test +daq/readoutgui/RunReadout.sh +daq/readoutgui/RunState.eps +daq/readoutgui/RunState.jpg +daq/readoutgui/RunstateMachine.tcl +daq/readoutgui/s800.test +daq/readoutgui/s800fake.tcl +daq/readoutgui/s800Provider.tcl +daq/readoutgui/scalerparametergui.tk +daq/readoutgui/SecretTk.c +daq/readoutgui/selectreadoutest.tk +daq/readoutgui/sshpipe.test +daq/readoutgui/sshPrompt.tcl +daq/readoutgui/sshProvider.tcl +daq/readoutgui/sshsimulator.testscript +daq/readoutgui/start.bash +daq/readoutgui/state.tcl +daq/readoutgui/state.test +daq/readoutgui/system.test +daq/readoutgui/tclTests.tcl +daq/readoutgui/testrunner.tk +daq/readoutgui/tests.test +daq/readoutgui/ui.tcl +daq/readoutgui/UniqueInstance.tcl +daq/readoutgui/versionUtils.tcl +daq/readoutgui/versionutils.test +daq/readoutgui/WaitPackage.cpp +daq/readoutgui/warning.tcl +daq/s800callouts/dummyrdo +daq/s800callouts/fakeControlServer.tcl +daq/s800callouts/Makefile.am +daq/s800callouts/ReadoutCallouts.tcl +daq/s800callouts/s800docs.xml +daq/s800callouts/s800rctl.tcl +daq/s800callouts/s800rctl.test +daq/s800callouts/s800rdocallouts.tcl +daq/s800callouts/tclTests.tcl +docbuild/images/callouts/1.eps +docbuild/images/callouts/1.gif +docbuild/images/callouts/1.pdf +docbuild/images/callouts/10.eps +docbuild/images/callouts/10.gif +docbuild/images/callouts/10.pdf +docbuild/images/callouts/2.eps +docbuild/images/callouts/2.gif +docbuild/images/callouts/2.pdf +docbuild/images/callouts/3.eps +docbuild/images/callouts/3.gif +docbuild/images/callouts/3.pdf +docbuild/images/callouts/4.eps +docbuild/images/callouts/4.gif +docbuild/images/callouts/4.pdf +docbuild/images/callouts/5.eps +docbuild/images/callouts/5.gif +docbuild/images/callouts/5.pdf +docbuild/images/callouts/6.eps +docbuild/images/callouts/6.gif +docbuild/images/callouts/6.pdf +docbuild/images/callouts/7.eps +docbuild/images/callouts/7.gif +docbuild/images/callouts/7.pdf +docbuild/images/callouts/8.eps +docbuild/images/callouts/8.gif +docbuild/images/callouts/8.pdf +docbuild/images/callouts/9.eps +docbuild/images/callouts/9.gif +docbuild/images/callouts/9.pdf +docbuild/images/callouts/Makefile.am +docbuild/images/caution.eps +docbuild/images/caution.gif +docbuild/images/caution.pdf +docbuild/images/home.eps +docbuild/images/home.gif +docbuild/images/home.pdf +docbuild/images/important.eps +docbuild/images/important.gif +docbuild/images/important.pdf +docbuild/images/Make.images +docbuild/images/Makefile.am +docbuild/images/next.eps +docbuild/images/next.gif +docbuild/images/next.pdf +docbuild/images/note.eps +docbuild/images/note.gif +docbuild/images/note.pdf +docbuild/images/prev.eps +docbuild/images/prev.gif +docbuild/images/prev.pdf +docbuild/images/tip.eps +docbuild/images/tip.gif +docbuild/images/tip.pdf +docbuild/images/toc-blank.eps +docbuild/images/toc-blank.gif +docbuild/images/toc-blank.pdf +docbuild/images/toc-minus.eps +docbuild/images/toc-minus.gif +docbuild/images/toc-minus.pdf +docbuild/images/toc-plus.eps +docbuild/images/toc-plus.gif +docbuild/images/toc-plus.pdf +docbuild/images/up.eps +docbuild/images/up.gif +docbuild/images/up.pdf +docbuild/images/warning.eps +docbuild/images/warning.gif +docbuild/images/warning.pdf +docbuild/alltsts.tcl +docbuild/chapter2book.py +docbuild/docbuilder.tcl +docbuild/fragmenttest.tcl +docbuild/Makefile.am +docbuild/mansectests.tcl +docbuild/metadirtest.tcl +docbuild/tutorial.xml +docbuild/walkdirtest.tcl +docconfig/config +docconfig/Makefile.am +epics/chanlog/chanlog.cpp +epics/chanlog/chanlog.xml +epics/chanlog/getinfo.cpp +epics/chanlog/getinfo.h +epics/controlpush/Asserts.h +epics/controlpush/CApplication.cpp +epics/controlpush/CApplication.h +epics/controlpush/CBuildChannelData.cpp +epics/controlpush/CBuildChannelData.h +epics/controlpush/CChannel.cpp +epics/controlpush/CChannel.h +epics/controlpush/CChannelList.cpp +epics/controlpush/CChannelList.h +epics/controlpush/CChannelVisitor.h +epics/controlpush/ChannelListTests.cpp +epics/controlpush/Channels.dat +epics/controlpush/CLookupVisitor.cpp +epics/controlpush/CLookupVisitor.h +epics/controlpush/cmdline.h +epics/controlpush/controlpush.xml +epics/controlpush/CStrings.cpp +epics/controlpush/CStrings.h +epics/controlpush/CUnitChannel.cpp +epics/controlpush/CUnitChannel.h +epics/controlpush/LookupVisitorTest.cpp +epics/controlpush/Main.cpp +epics/controlpush/options.ggo +epics/controlpush/TestChannel.cpp +epics/controlpush/TestRunner.cpp +epics/controlpush/TestUnitChannel.cpp +epics/epicsdisplay/add.html +epics/epicsdisplay/alarmconfig.html +epics/epicsdisplay/channelmenu.html +epics/epicsdisplay/channels.txt +epics/epicsdisplay/config.html +epics/epicsdisplay/displayepics.tcl +epics/epicsdisplay/epicsdisplay.in +epics/epicsdisplay/EpicsDisplay.tcl +epics/epicsdisplay/epicsdisplay.xml +epics/epicsdisplay/filemenu.html +epics/epicsdisplay/gui.html +epics/epicsdisplay/helpmenu.html +epics/epicsdisplay/Makefile.am +epics/epicsdisplay/overview.html +epics/epicsdisplay/testing.tcl +figures/intro-data-flow-diagram-diagnostics.png +figures/intro-data-flow-diagram.png +libtcl/autom4te.cache/output.0 +libtcl/autom4te.cache/output.1 +libtcl/autom4te.cache/output.2 +libtcl/autom4te.cache/requests +libtcl/autom4te.cache/traces.0 +libtcl/autom4te.cache/traces.1 +libtcl/autom4te.cache/traces.2 +libtcl/debian/source/format +libtcl/debian/changelog +libtcl/debian/compat +libtcl/debian/control +libtcl/debian/copyright +libtcl/debian/docs +libtcl/debian/libtclplus-dev.dirs +libtcl/debian/libtclplus-dev.install +libtcl/debian/libtclplus.dirs +libtcl/debian/libtclplus.install +libtcl/debian/README.Debian +libtcl/debian/README.source +libtcl/debian/rules +libtcl/exception/CDuplicateSingleton.cpp +libtcl/exception/CInvalidArgumentException.cpp +libtcl/exception/CInvalidPacketStateException.cpp +libtcl/exception/CNoSuchObjectException.cpp +libtcl/exception/ErrnoException.cpp +libtcl/exception/Exception.cpp +libtcl/exception/exceptions.xml +libtcl/exception/libException.la +libtcl/exception/libException_la-CDuplicateSingleton.lo +libtcl/exception/libException_la-CInvalidArgumentException.lo +libtcl/exception/libException_la-CNoSuchObjectException.lo +libtcl/exception/libException_la-ErrnoException.lo +libtcl/exception/libException_la-Exception.lo +libtcl/exception/libException_la-MonitorException.lo +libtcl/exception/libException_la-RangeError.lo +libtcl/exception/libException_la-StateException.lo +libtcl/exception/libException_la-StreamIOError.lo +libtcl/exception/libException_la-URIFormatException.lo +libtcl/exception/Makefile +libtcl/exception/Makefile.am +libtcl/exception/Makefile.in +libtcl/exception/MonitorException.cpp +libtcl/exception/RangeError.cpp +libtcl/exception/StateException.cpp +libtcl/exception/StreamIOError.cpp +libtcl/exception/testErrnoException.cpp +libtcl/exception/testException.cpp +libtcl/exception/testRangeError.cpp +libtcl/exception/TestRunner.cpp +libtcl/exception/testStreamIOError.cpp +libtcl/exception/unittests +libtcl/exception/URIFormatException.cpp +libtcl/include/exception/Asserts.h +libtcl/include/exception/CDuplicateSingleton.h +libtcl/include/exception/CInvalidArgumentException.h +libtcl/include/exception/CInvalidPacketStateException.h +libtcl/include/exception/CNoSuchObjectException.h +libtcl/include/exception/ErrnoException.h +libtcl/include/exception/Exception.h +libtcl/include/exception/MonitorException.h +libtcl/include/exception/RangeError.h +libtcl/include/exception/StateException.h +libtcl/include/exception/StreamIOError.h +libtcl/include/exception/URIFormatException.h +libtcl/include/tclplus/Asserts.h +libtcl/include/tclplus/CConfigurableObject.h +libtcl/include/tclplus/CItemConfiguration.h +libtcl/include/tclplus/ClanguageTraceCallbacks.h +libtcl/include/tclplus/CLanguageTraceCallbacks.h +libtcl/include/tclplus/CTCLChannelCommander.h +libtcl/include/tclplus/CTCLServer.h +libtcl/include/tclplus/CTCLStdioCommander.h +libtcl/include/tclplus/CTCLTcpServerInstance.h +libtcl/include/tclplus/TCLApplication.h +libtcl/include/tclplus/TCLChannel.h +libtcl/include/tclplus/TCLCommandPackage.h +libtcl/include/tclplus/TCLCompatibilityProcessor.h +libtcl/include/tclplus/TCLException.h +libtcl/include/tclplus/TCLFileHandler.h +libtcl/include/tclplus/TCLHashTable.h +libtcl/include/tclplus/TCLHashTableItem.h +libtcl/include/tclplus/TCLHashTableIterator.h +libtcl/include/tclplus/TCLIdleProcess.h +libtcl/include/tclplus/TCLInterpreter.h +libtcl/include/tclplus/TCLInterpreterObject.h +libtcl/include/tclplus/TCLList.h +libtcl/include/tclplus/TCLLiveEventLoop.h +libtcl/include/tclplus/TCLObject.h +libtcl/include/tclplus/TCLObjectPackage.h +libtcl/include/tclplus/TCLObjectProcessor.h +libtcl/include/tclplus/TCLPackagedCommand.h +libtcl/include/tclplus/TCLPackagedObjectProcessor.h +libtcl/include/tclplus/TCLProcessor.h +libtcl/include/tclplus/TCLResult.h +libtcl/include/tclplus/TCLString.h +libtcl/include/tclplus/TCLTimer.h +libtcl/include/tclplus/TCLTracedVariable.h +libtcl/include/tclplus/TCLVariable.h +libtcl/include/tclplus/TCLVersionHacks.h +libtcl/include/tclplus/VariableTraceCallback.h +libtcl/include/daqdatatypes.h +libtcl/m4/cppunit.m4 +libtcl/m4/libtool.m4 +libtcl/m4/ltoptions.m4 +libtcl/m4/ltsugar.m4 +libtcl/m4/ltversion.m4 +libtcl/m4/lt~obsolete.m4 +libtcl/m4/pthread.m4 +libtcl/m4/tcl.m4 +libtcl/tclplus/ccallbacktest.cpp +libtcl/tclplus/CConfigurableObject.cpp +libtcl/tclplus/CItemConfiguration.cpp +libtcl/tclplus/CLanguageTraceCallbacks.cpp +libtcl/tclplus/CLanguageTraceCallbacks.lo +libtcl/tclplus/compatcommand.cpp +libtcl/tclplus/CTCLChannelCommander.cpp +libtcl/tclplus/CTCLServer.cpp +libtcl/tclplus/CTCLStdioCommander.cpp +libtcl/tclplus/CTCLTcpServerInstance.cpp +libtcl/tclplus/eventtcl.tcl +libtcl/tclplus/evttclsh +libtcl/tclplus/evttclsh.cpp +libtcl/tclplus/interpretertest.cpp +libtcl/tclplus/interptests +libtcl/tclplus/libtclPlus.la +libtcl/tclplus/libtclPlus_la-CLanguageTraceCallbacks.lo +libtcl/tclplus/libtclPlus_la-CTCLChannelCommander.lo +libtcl/tclplus/libtclPlus_la-CTCLServer.lo +libtcl/tclplus/libtclPlus_la-CTCLStdioCommander.lo +libtcl/tclplus/libtclPlus_la-CTCLTcpServerInstance.lo +libtcl/tclplus/libtclPlus_la-TCLApplication.lo +libtcl/tclplus/libtclPlus_la-TCLChannel.lo +libtcl/tclplus/libtclPlus_la-TCLCommandPackage.lo +libtcl/tclplus/libtclPlus_la-TCLCompatibilityProcessor.lo +libtcl/tclplus/libtclPlus_la-TCLException.lo +libtcl/tclplus/libtclPlus_la-TCLFileHandler.lo +libtcl/tclplus/libtclPlus_la-TCLIdleProcess.lo +libtcl/tclplus/libtclPlus_la-TCLInterpreter.lo +libtcl/tclplus/libtclPlus_la-TCLInterpreterObject.lo +libtcl/tclplus/libtclPlus_la-TCLList.lo +libtcl/tclplus/libtclPlus_la-TCLLiveEventLoop.lo +libtcl/tclplus/libtclPlus_la-TCLObject.lo +libtcl/tclplus/libtclPlus_la-TCLObjectPackage.lo +libtcl/tclplus/libtclPlus_la-TCLObjectProcessor.lo +libtcl/tclplus/libtclPlus_la-TCLPackagedObjectProcessor.lo +libtcl/tclplus/libtclPlus_la-TCLProcessor.lo +libtcl/tclplus/libtclPlus_la-TCLResult.lo +libtcl/tclplus/libtclPlus_la-TCLString.lo +libtcl/tclplus/libtclPlus_la-TCLTimer.lo +libtcl/tclplus/libtclPlus_la-TCLTracedVariable.lo +libtcl/tclplus/libtclPlus_la-TCLVariable.lo +libtcl/tclplus/Makefile +libtcl/tclplus/Makefile.am +libtcl/tclplus/Makefile.in +libtcl/tclplus/objcommandtest.cpp +libtcl/tclplus/objecttest.cpp +libtcl/tclplus/packagetests.cpp +libtcl/tclplus/resulttest.cpp +libtcl/tclplus/TCLApplication.cpp +libtcl/tclplus/TCLChannel.cpp +libtcl/tclplus/TCLChannel.lo +libtcl/tclplus/TCLCommandPackage.cpp +libtcl/tclplus/TCLCommandPackage.lo +libtcl/tclplus/TCLCompatibilityProcessor.cpp +libtcl/tclplus/TCLCompatibilityProcessor.lo +libtcl/tclplus/TCLException.cpp +libtcl/tclplus/TCLException.lo +libtcl/tclplus/TCLFileHandler.cpp +libtcl/tclplus/TCLFileHandler.lo +libtcl/tclplus/TCLIdleProcess.cpp +libtcl/tclplus/TCLIdleProcess.lo +libtcl/tclplus/TCLInterpreter.cpp +libtcl/tclplus/TCLInterpreter.lo +libtcl/tclplus/TCLInterpreterObject.cpp +libtcl/tclplus/TCLInterpreterObject.lo +libtcl/tclplus/TCLList.cpp +libtcl/tclplus/TCLList.lo +libtcl/tclplus/TCLLiveEventLoop.cpp +libtcl/tclplus/TCLObject.cpp +libtcl/tclplus/TCLObject.lo +libtcl/tclplus/TCLObjectPackage.cpp +libtcl/tclplus/TCLObjectPackage.lo +libtcl/tclplus/TCLObjectProcessor.cpp +libtcl/tclplus/TCLObjectProcessor.lo +libtcl/tclplus/TCLPackagedObjectProcessor.cpp +libtcl/tclplus/TCLPackagedObjectProcessor.lo +libtcl/tclplus/tclplus.xml +libtcl/tclplus/TCLProcessor.cpp +libtcl/tclplus/TCLProcessor.lo +libtcl/tclplus/TCLResult.cpp +libtcl/tclplus/TCLResult.lo +libtcl/tclplus/TCLString.cpp +libtcl/tclplus/TCLString.lo +libtcl/tclplus/TCLTest.cpp +libtcl/tclplus/TCLTimer.cpp +libtcl/tclplus/TCLTimer.lo +libtcl/tclplus/TCLTracedVariable.cpp +libtcl/tclplus/TCLTracedVariable.lo +libtcl/tclplus/TCLVariable.cpp +libtcl/tclplus/TCLVariable.lo +libtcl/tclplus/tcpservertest +libtcl/tclplus/tcpservertest.cpp +libtcl/tclplus/TestRunner.cpp +libtcl/tclplus/TestRunner.lo +libtcl/tclplus/tkAppInit.c +libtcl/tclplus/tracetests +libtcl/tclplus/tracevartest.cpp +libtcl/aclocal.m4 +libtcl/AUTHORS +libtcl/ChangeLog +libtcl/config.h +libtcl/config.h.in +libtcl/config.log +libtcl/config.status +libtcl/configure +libtcl/configure.ac +libtcl/COPYING +libtcl/INSTALL +libtcl/libtool +libtcl/Makefile +libtcl/Makefile.am +libtcl/Makefile.in +libtcl/NEWS +libtcl/README +libtcl/stamp-h1 +libtcl/testBuildTarball +m4/ax_check_openssl.m4 +m4/ax_cxx_compile_stdcxx_11.m4 +m4/ax_pkg_swig.m4 +m4/ax_python_pkgcheck.m4 +m4/cppunit.m4 +m4/epics.m4 +m4/gengetopt.m4 +m4/libusb.m4 +m4/pyqt.m4 +m4/tcl.m4 +sbs/caenfwloader/CAENComm_SBS.cpp +sbs/caenfwloader/sbscaenupgrader.xml +sbs/driver/dd/85702000.dat +sbs/driver/dd/bt_assert.h +sbs/driver/dd/bt_bit.c +sbs/driver/dd/bt_bit.h +sbs/driver/dd/bt_delay.c +sbs/driver/dd/bt_delay.h +sbs/driver/dd/bt_diag.c +sbs/driver/dd/bt_event.c +sbs/driver/dd/bt_event.h +sbs/driver/dd/bt_icbr_thread.c +sbs/driver/dd/bt_isr.c +sbs/driver/dd/bt_llist.c +sbs/driver/dd/bt_llist.h +sbs/driver/dd/bt_mem.c +sbs/driver/dd/bt_mem.h +sbs/driver/dd/bt_mutex.c +sbs/driver/dd/bt_mutex.h +sbs/driver/dd/bt_nbus.c +sbs/driver/dd/bt_notrace.h +sbs/driver/dd/bt_param.c +sbs/driver/dd/bt_rwlck.c +sbs/driver/dd/bt_rwlck.h +sbs/driver/dd/bt_setup.c +sbs/driver/dd/bt_trace.h +sbs/driver/dd/bt_xfer.c +sbs/driver/dd/btdd.h +sbs/driver/dd/btp_bind.c +sbs/driver/dd/btp_cfg.c +sbs/driver/dd/btp_ioctl.c +sbs/driver/dd/btp_kernel.c +sbs/driver/dd/btp_lowio.c +sbs/driver/dd/btp_mmap.c +sbs/driver/dd/btp_open.c +sbs/driver/dd/btp_rdwr.c +sbs/driver/dd/btp_version.c +sbs/driver/dd/btpdd.h +sbs/driver/dd/btunit.h +sbs/driver/dd/GNUmakefile.am +sbs/driver/dd/mkbtp +sbs/driver/include/bt_error.h +sbs/driver/include/bt_time.h +sbs/driver/include/btapi.h +sbs/driver/include/btdbpci.h +sbs/driver/include/btdef.h +sbs/driver/include/btio.h +sbs/driver/include/btpapi.h +sbs/driver/include/btpdef.h +sbs/driver/include/btpio.h +sbs/driver/include/btuisr.h +sbs/driver/src/bt_bind.c +sbs/driver/src/bt_cas.c +sbs/driver/src/bt_chke.c +sbs/driver/src/bt_clre.c +sbs/driver/src/bt_ctrl.c +sbs/driver/src/bt_hw_diag.c +sbs/driver/src/bt_icbr.c +sbs/driver/src/bt_info.c +sbs/driver/src/bt_init.c +sbs/driver/src/bt_ior.c +sbs/driver/src/bt_iow.c +sbs/driver/src/bt_locking.c +sbs/driver/src/bt_mmap.c +sbs/driver/src/bt_name.c +sbs/driver/src/bt_open.c +sbs/driver/src/bt_or_io.c +sbs/driver/src/bt_perr.c +sbs/driver/src/bt_rdwr.c +sbs/driver/src/bt_reset.c +sbs/driver/src/bt_sema.c +sbs/driver/src/bt_send_irq.c +sbs/driver/src/bt_serr.c +sbs/driver/src/bt_stat.c +sbs/driver/src/bt_string.c +sbs/driver/src/bt_tas.c +sbs/driver/src/btpiflib.h +sbs/nsclapi/CVME.h +sbs/nsclapi/CVMEInterface.h +sbs/nsclapi/CVMEptr.h +sbs/nsclapi/Locking.cpp +sbs/nsclapi/Makefile.am +sbs/nsclapi/MmapError.cpp +sbs/nsclapi/MmapError.h +sbs/nsclapi/SBSBIT3API.cpp +sbs/nsclapi/SBSBit3API.h +sbs/nsclapi/sbsVmeApi.xml +sbs/nsclapi/VmeModule.cpp +sbs/nsclapi/VmeModule.h +sbs/puretcl/caennet.tcl +sbs/puretcl/caennet.xml +sbs/puretcl/camac.tcl +sbs/puretcl/camac.xml +sbs/puretcl/cratelocator.tcl +sbs/puretcl/cratelocator.xml +sbs/puretcl/Makefile.am +sbs/puretcl/wienercamac.tcl +sbs/puretcl/wienercamac.xml +sbs/readout/Asserts.h +sbs/readout/CAuthorizedTclServer.cpp +sbs/readout/CAuthorizedTclServer.h +sbs/readout/CBeginCommand.cpp +sbs/readout/CBeginCommand.h +sbs/readout/CBusy.cpp +sbs/readout/CBusy.h +sbs/readout/CCAENV262Busy.cpp +sbs/readout/CCAENV262Busy.h +sbs/readout/CCAENV262Trigger.cpp +sbs/readout/CCAENV262Trigger.h +sbs/readout/CComposite.cpp +sbs/readout/CComposite.h +sbs/readout/CCompoundEventSegment.cpp +sbs/readout/CCompoundEventSegment.h +sbs/readout/CDocumentedPacket.cpp +sbs/readout/CDocumentedPacket.h +sbs/readout/CDocumentedPacketManager.cpp +sbs/readout/CDocumentedPacketManager.h +sbs/readout/CDocumentedVars.cpp +sbs/readout/CDocumentedVars.h +sbs/readout/CEndCommand.cpp +sbs/readout/CEndCommand.h +sbs/readout/CEventPacket.cpp +sbs/readout/CEventPacket.h +sbs/readout/CEventSegment.cpp +sbs/readout/CEventSegment.h +sbs/readout/CEventTrigger.cpp +sbs/readout/CEventTrigger.h +sbs/readout/CExperiment.cpp +sbs/readout/CExperiment.h +sbs/readout/CInitCommand.cpp +sbs/readout/CInitCommand.h +sbs/readout/CInvalidPacketStateException.cpp +sbs/readout/CInvalidPacketStateException.h +sbs/readout/CNullTrigger.cpp +sbs/readout/CNullTrigger.h +sbs/readout/CObject.h +sbs/readout/compositeTests.cpp +sbs/readout/compoundevsegTest.cpp +sbs/readout/CPauseCommand.cpp +sbs/readout/CPauseCommand.h +sbs/readout/CReadoutException.cpp +sbs/readout/CReadoutException.h +sbs/readout/CReadoutMain.cpp +sbs/readout/CReadoutMain.h +sbs/readout/CResumeCommand.cpp +sbs/readout/CResumeCommand.h +sbs/readout/CRunControlPackage.cpp +sbs/readout/CRunControlPackage.h +sbs/readout/CScaler.cpp +sbs/readout/CScaler.h +sbs/readout/CScalerBank.cpp +sbs/readout/CScalerBank.h +sbs/readout/CTCLAuthorizer.cpp +sbs/readout/CTCLAuthorizer.h +sbs/readout/CTimedTrigger.cpp +sbs/readout/CTimedTrigger.h +sbs/readout/CTriggerLoop.cpp +sbs/readout/CTriggerLoop.h +sbs/readout/CTriggerLoopTests.cpp +sbs/readout/CV977Busy.cpp +sbs/readout/CV977Busy.h +sbs/readout/CV977Trigger.cpp +sbs/readout/CV977Trigger.h +sbs/readout/CVariableBuffers.cpp +sbs/readout/CVariableBuffers.h +sbs/readout/CVarList.cpp +sbs/readout/CVarList.h +sbs/readout/docvartests.cpp +sbs/readout/eventpackettests.cpp +sbs/readout/experimentTests.cpp +sbs/readout/Makefile.am +sbs/readout/options.ggo +sbs/readout/packettests.cpp +sbs/readout/readoutStateHook.tcl +sbs/readout/RunState.cpp +sbs/readout/RunState.h +sbs/readout/SBSRdoMakeIncludes.in +sbs/readout/SBSReadout_man.xml +sbs/readout/SBSReadout_user.xml +sbs/readout/scalerbankTests.cpp +sbs/readout/Skeleton.cpp +sbs/readout/Skeleton.h +sbs/readout/TestRunner.cpp +sbs/readout/testRunStatePkg.cpp +sbs/readout/testVariableBuffers.cpp +sbs/readout/timedtriggerTest.cpp +sbs/readout/triggerresponseTests.cpp +sbs/readout/UserMakefile.in +sbs/readout/varlisttest.cpp +sbs/scripted/CBoolConfigParam.cpp +sbs/scripted/CBoolConfigParam.h +sbs/scripted/CCAENModule.cpp +sbs/scripted/CCAENModule.h +sbs/scripted/CCAENV775.cpp +sbs/scripted/CCAENV775.h +sbs/scripted/CCAENV775Creator.cpp +sbs/scripted/CCAENV775Creator.h +sbs/scripted/CCAENV785.cpp +sbs/scripted/CCAENV785.h +sbs/scripted/CCAENV785Creator.cpp +sbs/scripted/CCAENV785Creator.h +sbs/scripted/CCAENV792.cpp +sbs/scripted/CCAENV792.h +sbs/scripted/CCAENV792Creator.cpp +sbs/scripted/CCAENV792Creator.h +sbs/scripted/CCAENV820Registers.h +sbs/scripted/CCAENV830Creator.cpp +sbs/scripted/CCAENV830Creator.h +sbs/scripted/CCAENV830Module.cpp +sbs/scripted/CCAENV830Module.h +sbs/scripted/CConfigurableObject.cpp +sbs/scripted/CConfigurableObject.h +sbs/scripted/CConfigurationParameter.cpp +sbs/scripted/CConfigurationParameter.h +sbs/scripted/CDigitizerDictionary.cpp +sbs/scripted/CDigitizerDictionary.h +sbs/scripted/CDigitizerModule.cpp +sbs/scripted/CDigitizerModule.h +sbs/scripted/CEnumParameter.cpp +sbs/scripted/CEnumParameter.h +sbs/scripted/CIntArrayParam.cpp +sbs/scripted/CIntArrayParam.h +sbs/scripted/CIntConfigParam.cpp +sbs/scripted/CIntConfigParam.h +sbs/scripted/CModuleCommand.cpp +sbs/scripted/CModuleCommand.h +sbs/scripted/CModuleCreator.cpp +sbs/scripted/CModuleCreator.h +sbs/scripted/CPacketCreator.cpp +sbs/scripted/CPacketCreator.h +sbs/scripted/CReadableObject.cpp +sbs/scripted/CReadableObject.h +sbs/scripted/CReadException.cpp +sbs/scripted/CReadException.h +sbs/scripted/CReadOrder.cpp +sbs/scripted/CReadOrder.h +sbs/scripted/CScalerBank.cpp +sbs/scripted/CScalerBank.h +sbs/scripted/CScalerModule.cpp +sbs/scripted/CScalerModule.h +sbs/scripted/CScriptedScalers.cpp +sbs/scripted/CScriptedScalers.h +sbs/scripted/CScriptedSegment.cpp +sbs/scripted/CScriptedSegment.h +sbs/scripted/CSIS3300Creator.cpp +sbs/scripted/CSIS3300Creator.h +sbs/scripted/CSIS3300Module.cpp +sbs/scripted/CSIS3300Module.h +sbs/scripted/CStringArrayparam.cpp +sbs/scripted/CStringArrayparam.h +sbs/scripted/CStringConfigParam.cpp +sbs/scripted/CStringConfigParam.h +sbs/scripted/CTraditionalV977Busy.cpp +sbs/scripted/CTraditionalV977Busy.h +sbs/scripted/CTraditionalV977Trigger.cpp +sbs/scripted/CTraditionalV977Trigger.h +sbs/scripted/CTriggerCommand.cpp +sbs/scripted/CTriggerCommand.h +sbs/scripted/CV1x90Creator.cpp +sbs/scripted/CV1x90Creator.h +sbs/scripted/CV1x90Module.cpp +sbs/scripted/CV1x90Module.h +sbs/scripted/Makefile.am +sbs/scripted/scripted.xml +sbs/scripted/ScriptedBundle.cpp +sbs/scripted/ScriptedBundle.h +sbs/scripted/scriptedreadout_Makefile.include +sbs/scripted/Skeleton.cpp +sbs/scripted/Skeleton.h +sbs/slowcontrols/bcnaf/bcnaf.tcl +sbs/slowcontrols/bcnaf/bcnaf.xml +sbs/slowcontrols/bcnaf/cesbcnaf.tcl +sbs/slowcontrols/bcnaf/wienerbcnaf.tcl +sbs/slowcontrols/caenv812/caenv812_man.xml +sbs/slowcontrols/caenv812/caenv812_user.xml +sbs/slowcontrols/caenv812/caenv812control.tcl +sbs/slowcontrols/caenv812/caenv812Gui.tcl +sbs/slowcontrols/caenv812/CFD812.tcl +sbs/slowcontrols/caenv812/CFDState.tcl +sbs/slowcontrols/caenv812/close.html +sbs/slowcontrols/caenv812/config.html +sbs/slowcontrols/caenv812/exit.html +sbs/slowcontrols/caenv812/filemenu.html +sbs/slowcontrols/caenv812/gui.html +sbs/slowcontrols/caenv812/helpmenu.html +sbs/slowcontrols/caenv812/loadcfd.tcl +sbs/slowcontrols/caenv812/new.html +sbs/slowcontrols/caenv812/overview.html +sbs/slowcontrols/caenv812/read.html +sbs/slowcontrols/caenv812/write.html +sbs/slowcontrols/n568b/close.html +sbs/slowcontrols/n568b/config.html +sbs/slowcontrols/n568b/exit.html +sbs/slowcontrols/n568b/filemenu.html +sbs/slowcontrols/n568b/gui.html +sbs/slowcontrols/n568b/helpmenu.html +sbs/slowcontrols/n568b/loadshaper.tcl +sbs/slowcontrols/n568b/Makefile.am +sbs/slowcontrols/n568b/n568.xml +sbs/slowcontrols/n568b/n568b.tcl +sbs/slowcontrols/n568b/n568Control.tcl +sbs/slowcontrols/n568b/n568Panel.tcl +sbs/slowcontrols/n568b/new.html +sbs/slowcontrols/n568b/overview.html +sbs/slowcontrols/n568b/read.html +sbs/slowcontrols/n568b/titledSpinBox.tcl +sbs/slowcontrols/n568b/write.html +sbs/slowcontrols/vhq/configfile.html +sbs/slowcontrols/vhq/configilimit.html +sbs/slowcontrols/vhq/configmenu.html +sbs/slowcontrols/vhq/configspeeds.html +sbs/slowcontrols/vhq/fileclose.html +sbs/slowcontrols/vhq/filemenu.html +sbs/slowcontrols/vhq/filenew.html +sbs/slowcontrols/vhq/filequit.html +sbs/slowcontrols/vhq/fileread.html +sbs/slowcontrols/vhq/filewrite.html +sbs/slowcontrols/vhq/gui.html +sbs/slowcontrols/vhq/guitest.tcl +sbs/slowcontrols/vhq/helpmenu.html +sbs/slowcontrols/vhq/Makefile.am +sbs/slowcontrols/vhq/menubar.html +sbs/slowcontrols/vhq/overview.html +sbs/slowcontrols/vhq/pkgIndex.tcl +sbs/slowcontrols/vhq/vhq.xml +sbs/slowcontrols/vhq/vhq202m.tcl +sbs/slowcontrols/vhq/vhqControl.tcl +sbs/slowcontrols/vhq/vhqPanel.tcl +sbs/slowcontrols/vhs/bindDown.tcl +sbs/slowcontrols/vhs/chantest.tcl +sbs/slowcontrols/vhs/Makefile.am +sbs/slowcontrols/vhs/meter.tcl +sbs/slowcontrols/vhs/pollmanager.tcl +sbs/slowcontrols/vhs/vhs.tcl +sbs/slowcontrols/vhs/vhs.xml +sbs/slowcontrols/vhs/vhsPanel.tcl +sbs/slowcontrols/vhs/VhsWidgets.tcl +sbs/tclpackage/Makefile.am +sbs/tclpackage/VMECommand.cpp +sbs/tclpackage/VMECommand.h +sbs/tclpackage/VMEMapCommand.cpp +sbs/tclpackage/VMEMapCommand.h +sbs/tclpackage/VMEPackage.cpp +sbs/tclpackage/vmetcl.xml +sbs/VmeDevice/Makefile.am +sbs/VmeDevice/VmeDevice.cpp +sbs/vmemodules/CADC2530.cpp +sbs/vmemodules/CADC2530.h +sbs/vmemodules/CAENcard.cpp +sbs/vmemodules/CAENcard.h +sbs/vmemodules/CAENcard_767.cpp +sbs/vmemodules/CAENcard_767.h +sbs/vmemodules/CaenIO.cpp +sbs/vmemodules/CaenIO.h +sbs/vmemodules/camac.h +sbs/vmemodules/camacmap.cpp +sbs/vmemodules/camacmap.h +sbs/vmemodules/CCAENChain.cpp +sbs/vmemodules/CCAENChain.h +sbs/vmemodules/CCAENV1x90.cpp +sbs/vmemodules/CCAENV1x90.h +sbs/vmemodules/CCAENV1x90Data.h +sbs/vmemodules/CCAENV1x90Opcodes.h +sbs/vmemodules/CCAENV1x90Registers.h +sbs/vmemodules/CCAENV560.cpp +sbs/vmemodules/CCAENV560.h +sbs/vmemodules/CCAENV560Registers.h +sbs/vmemodules/CCAENV820Registers.h +sbs/vmemodules/CCAENV830.cpp +sbs/vmemodules/CCAENV830.h +sbs/vmemodules/CCAENV977.cpp +sbs/vmemodules/CCAENV977.h +sbs/vmemodules/CCAMACBranch.h +sbs/vmemodules/CCAMACModule.cpp +sbs/vmemodules/CCAMACModule.h +sbs/vmemodules/cescamac.h +sbs/vmemodules/CESCBD8210.cpp +sbs/vmemodules/CESCBD8210.h +sbs/vmemodules/cesmacros.h +sbs/vmemodules/CMemoryMappedCAMACBranch.cpp +sbs/vmemodules/CMemoryMappedCAMACBranch.h +sbs/vmemodules/CModule32.cpp +sbs/vmemodules/CModule32.h +sbs/vmemodules/CSIS3600.cpp +sbs/vmemodules/CSIS3600.h +sbs/vmemodules/CSIS3820.cpp +sbs/vmemodules/CSIS3820.h +sbs/vmemodules/CVC32CC32.cpp +sbs/vmemodules/CVC32CC32.h +sbs/vmemodules/CVMEScaler.cpp +sbs/vmemodules/CVMEScaler.h +sbs/vmemodules/CVMEScalerLRS1151.cpp +sbs/vmemodules/CVMEScalerLRS1151.h +sbs/vmemodules/DeviceSupport.xml +sbs/vmemodules/macros.h +sbs/vmemodules/Makefile.am +sbs/vmemodules/Nimout.cpp +sbs/vmemodules/Nimout.h +sbs/vmemodules/sis3300.cpp +sbs/vmemodules/si... [truncated message content] |
From: <ro...@us...> - 2015-11-16 12:35:29
|
Revision: 5147 http://sourceforge.net/p/nscldaq/code/5147 Author: ron-fox Date: 2015-11-16 12:35:27 +0000 (Mon, 16 Nov 2015) Log Message: ----------- Fix book-keeping error in large event handling for vmusb Modified Paths: -------------- branches/10.2-maintenance/usb/vmusb/router/COutputThread.cpp Modified: branches/10.2-maintenance/usb/vmusb/router/COutputThread.cpp =================================================================== --- branches/10.2-maintenance/usb/vmusb/router/COutputThread.cpp 2015-11-16 02:04:31 UTC (rev 5146) +++ branches/10.2-maintenance/usb/vmusb/router/COutputThread.cpp 2015-11-16 12:35:27 UTC (rev 5147) @@ -596,7 +596,7 @@ segmentSize += 1; // Size is not self inclusive if ((segmentSize + m_nWordsInBuffer) >= m_nOutputBufferSize/sizeof(uint16_t)) { int newSize = 2*segmentSize*sizeof(uint16_t); - uint8_t* pNewBuffer = reinterpret_cast<uint8_t*>(realloc(m_pBuffer, newSize)); + uint8_t* pNewBuffer = reinterpret_cast<uint8_t*>(realloc(m_pBuffer, m_nOutputBufferSize + newSize)); if (pNewBuffer) { m_pBuffer = pNewBuffer; m_pCursor = m_pBuffer + m_nWordsInBuffer * sizeof(uint16_t); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jr...@us...> - 2015-11-16 02:04:34
|
Revision: 5146 http://sourceforge.net/p/nscldaq/code/5146 Author: jrtomps Date: 2015-11-16 02:04:31 +0000 (Mon, 16 Nov 2015) Log Message: ----------- Fixes bug #4936 Broken timed run controls - This addresses the incorrect restoration of time between sessions so that the hour setting does not become the minutes setting. It also fixes the days spinbox that was broken entirely. - These fixes are manually tested and verified to work. Modified Paths: -------------- trunk/main/daq/readoutgui/ui.tcl Modified: trunk/main/daq/readoutgui/ui.tcl =================================================================== --- trunk/main/daq/readoutgui/ui.tcl 2015-11-13 14:42:32 UTC (rev 5145) +++ trunk/main/daq/readoutgui/ui.tcl 2015-11-16 02:04:31 UTC (rev 5146) @@ -1470,7 +1470,7 @@ # to options(-days) # method _updateDays {} { - set options(-days) [$win.days get] + set options(-days) [$win.time.days get] } ## @@ -1667,7 +1667,7 @@ set days [$w cget -days] return [expr { - ((($days*24) + $hrs * 60) + $mins *60) + $secs + (($days*24 + $hrs)*60 + $mins)*60 + $secs }] } ## This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2015-11-13 14:42:35
|
Revision: 5145 http://sourceforge.net/p/nscldaq/code/5145 Author: ron-fox Date: 2015-11-13 14:42:32 +0000 (Fri, 13 Nov 2015) Log Message: ----------- Tag nscldaq release 11.0-019 Added Paths: ----------- tags/nscldaq-11.0-019/ tags/nscldaq-11.0-019/base/ tags/nscldaq-11.0-019/base/tclutils/Makefile.am tags/nscldaq-11.0-019/base/tclutils/Process.tcl tags/nscldaq-11.0-019/base/thread/ tags/nscldaq-11.0-019/daq/ tags/nscldaq-11.0-019/daq/actions/actions.tcl tags/nscldaq-11.0-019/daq/actions/actions.test tags/nscldaq-11.0-019/daq/eventbuilder/endrunmon.tcl tags/nscldaq-11.0-019/daq/eventbuilder/evbRdoCallouts.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/EVBConfigure.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/JobBuilderUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/JobConfigUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/JobProcessor.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/Makefile.am tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/MissingSourceUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/OfflineOrdererUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/RunProcessor.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/RunStatusUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/jobprocessor.test tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/offlineorderer.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/runprocessor.test tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/runstatusui.test tags/nscldaq-11.0-019/daq/eventbuilder/ringSourceMgr.tcl tags/nscldaq-11.0-019/daq/readoutgui/DataSourceMonitor.tcl tags/nscldaq-11.0-019/daq/readoutgui/ReadoutGuiClient.tcl tags/nscldaq-11.0-019/daq/readoutgui/RunstateMachine.tcl tags/nscldaq-11.0-019/daq/readoutgui/eventLogBundle.tcl tags/nscldaq-11.0-019/daq/readoutgui/multilogger.tcl tags/nscldaq-11.0-019/daq/readoutgui/readoutGuiProvider.tcl tags/nscldaq-11.0-019/daq/readoutgui/remoteControl.tcl tags/nscldaq-11.0-019/daq/readoutgui/remotecontrol.test tags/nscldaq-11.0-019/daq/readoutgui/s800.test tags/nscldaq-11.0-019/daq/readoutgui/s800Provider.tcl tags/nscldaq-11.0-019/daq/readoutgui/s800fake.tcl tags/nscldaq-11.0-019/daq/readoutgui/ui.tcl tags/nscldaq-11.0-019/daq/s800callouts/s800rctl.tcl tags/nscldaq-11.0-019/sbs/ tags/nscldaq-11.0-019/sbs/readout/CExperiment.cpp tags/nscldaq-11.0-019/sbs/vmemodules/CModule32.h tags/nscldaq-11.0-019/sbs/vmemodules/CSIS3820.h tags/nscldaq-11.0-019/usb/ tags/nscldaq-11.0-019/usb/ccusb/devices/CCamacCompat.hpp tags/nscldaq-11.0-019/usb/ccusb/devices/CConfigurableObject.cpp tags/nscldaq-11.0-019/usb/ccusb/router/COutputThread.cpp tags/nscldaq-11.0-019/usb/common/configurableobject/CConfigurableObject.cpp tags/nscldaq-11.0-019/usb/vmusb/controlpanels/AGD16XLM72Panel.tcl tags/nscldaq-11.0-019/usb/vmusb/controlpanels/Makefile.am tags/nscldaq-11.0-019/usb/vmusb/controlpanels/XLM72GateDelayControl.tcl tags/nscldaq-11.0-019/usb/vmusb/controlpanels/client.tcl tags/nscldaq-11.0-019/usb/vmusb/controlpanels/gd16_startup.png tags/nscldaq-11.0-019/usb/vmusb/controlpanels/runStateObserver.tcl tags/nscldaq-11.0-019/usb/vmusb/controlpanels/xlm72gatedelaycontrol.xml tags/nscldaq-11.0-019/usb/vmusb/daqconfig/CConfiguration.cpp tags/nscldaq-11.0-019/usb/vmusb/daqconfig/Makefile.am tags/nscldaq-11.0-019/usb/vmusb/tcldrivers/AGD16XLM72.tcl tags/nscldaq-11.0-019/utilities/ tags/nscldaq-11.0-019/utilities/Makefile.am tags/nscldaq-11.0-019/utilities/fileanalyzer/ Removed Paths: ------------- tags/nscldaq-11.0-019/base/ tags/nscldaq-11.0-019/base/tclutils/Makefile.am tags/nscldaq-11.0-019/base/thread/ tags/nscldaq-11.0-019/daq/ tags/nscldaq-11.0-019/daq/actions/actions.tcl tags/nscldaq-11.0-019/daq/actions/actions.test tags/nscldaq-11.0-019/daq/eventbuilder/endrunmon.tcl tags/nscldaq-11.0-019/daq/eventbuilder/evbRdoCallouts.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/JobBuilderUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/JobConfigUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/JobProcessor.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/Makefile.am tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/MissingSourceUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/OfflineOrdererUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/RunProcessor.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/RunStatusUI.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/jobprocessor.test tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/offlineorderer.tcl tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/runprocessor.test tags/nscldaq-11.0-019/daq/eventbuilder/offlineorderer/runstatusui.test tags/nscldaq-11.0-019/daq/eventbuilder/ringSourceMgr.tcl tags/nscldaq-11.0-019/daq/readoutgui/DataSourceMonitor.tcl tags/nscldaq-11.0-019/daq/readoutgui/ReadoutGuiClient.tcl tags/nscldaq-11.0-019/daq/readoutgui/RunstateMachine.tcl tags/nscldaq-11.0-019/daq/readoutgui/eventLogBundle.tcl tags/nscldaq-11.0-019/daq/readoutgui/multilogger.tcl tags/nscldaq-11.0-019/daq/readoutgui/readoutGuiProvider.tcl tags/nscldaq-11.0-019/daq/readoutgui/remoteControl.tcl tags/nscldaq-11.0-019/daq/readoutgui/remotecontrol.test tags/nscldaq-11.0-019/daq/readoutgui/s800.test tags/nscldaq-11.0-019/daq/readoutgui/s800Provider.tcl tags/nscldaq-11.0-019/daq/readoutgui/s800fake.tcl tags/nscldaq-11.0-019/daq/readoutgui/ui.tcl tags/nscldaq-11.0-019/daq/s800callouts/s800rctl.tcl tags/nscldaq-11.0-019/sbs/ tags/nscldaq-11.0-019/sbs/readout/CExperiment.cpp tags/nscldaq-11.0-019/sbs/vmemodules/CModule32.h tags/nscldaq-11.0-019/sbs/vmemodules/CSIS3820.h tags/nscldaq-11.0-019/usb/ tags/nscldaq-11.0-019/usb/ccusb/daqconfig/CCamacCompat.hpp tags/nscldaq-11.0-019/usb/ccusb/devices/CCamacCompat.hpp tags/nscldaq-11.0-019/usb/ccusb/devices/CConfigurableObject.cpp tags/nscldaq-11.0-019/usb/ccusb/router/COutputThread.cpp tags/nscldaq-11.0-019/usb/common/configurableobject/CConfigurableObject.cpp tags/nscldaq-11.0-019/usb/vmusb/controlpanels/Makefile.am tags/nscldaq-11.0-019/usb/vmusb/controlpanels/client.tcl tags/nscldaq-11.0-019/usb/vmusb/daqconfig/CConfiguration.cpp tags/nscldaq-11.0-019/usb/vmusb/daqconfig/Makefile.am tags/nscldaq-11.0-019/usb/vmusb/tcldrivers/AGD16XLM72.tcl tags/nscldaq-11.0-019/utilities/ tags/nscldaq-11.0-019/utilities/Makefile.am Index: tags/nscldaq-11.0-019 =================================================================== --- trunk/main 2015-11-13 12:35:18 UTC (rev 5143) +++ tags/nscldaq-11.0-019 2015-11-13 14:42:32 UTC (rev 5145) Property changes on: tags/nscldaq-11.0-019 ___________________________________________________________________ Added: svn:mergeinfo ## -0,0 +1,28 ## +/branches/11.0-s800conv-development:3453-4324 +/branches/11.0-s800conv-fixes:4745-4796 +/branches/feature-EVBMonitorThread:5008-5019 +/branches/feature-Post-GRETINA-Testrun:5034-5142 +/branches/features-nscldaq-11.0-014:5026-5066 +/branches/hira-sisstuff:2744-2997 +/branches/nextgen-ccusb-feature:2631-2641 +/branches/nextgen-ccusb-userdrivers-feature:2644-2659 +/branches/nextgen-vmusb-userdrivers-feature:2665-2711 +/branches/nscldaq-10.1-004-development:2714-2742 +/branches/nscldaq-10.2-001-development:2931-2998 +/branches/nscldaq-10.2-development:2749-2997 +/branches/nscldaq-11.0-000-development:4472-4669 +/branches/nscldaq-11.0-docs:4441-4445 +/branches/nscldaq-11.0-filter-development:3275-3450 +/branches/nscldaq-11.0-mdgg16:4328-4438 +/branches/nscldaq-11.0-rc12-development:3723-3888 +/branches/nscldaq-11.0-rc14:3900-3953 +/branches/nscldaq-11.0-rc15:3967-4096 +/branches/nscldaq-11.0-rc16:4105-4159 +/branches/nscldaq-11.0-rc17-development:4301-4372 +/branches/nscldaq-11.0-rc18:4395-4453 +/branches/nscldaq-11.x-mqdc:4448-4549 +/branches/revert-main:4668-4675 +/branches/vmusbremote-development:2803 +/tags/hira-sisstuff-pre-merge:2893-2918 +/tags/vmusbremote-working:2804-2816 +/trunk/nextgen:3002-3154 \ No newline at end of property Deleted: tags/nscldaq-11.0-019/base/tclutils/Makefile.am =================================================================== --- trunk/main/base/tclutils/Makefile.am 2015-11-13 10:42:07 UTC (rev 5142) +++ tags/nscldaq-11.0-019/base/tclutils/Makefile.am 2015-11-13 14:42:32 UTC (rev 5145) @@ -1,19 +0,0 @@ - -DRIVERDest=@prefix@/TclLibs/tclutils - -TCLDRIVERS= Utils.tcl BlockCompleter.tcl TclSourceFilter.tcl -TCLTESTS= utils.test blockcompleter.test tclsourcefilter.test - -install-exec-local: - $(mkinstalldirs) @prefix@/TclLibs - $(mkinstalldirs) $(DRIVERDest) - for f in $(TCLDRIVERS); do $(INSTALL_SCRIPT) @srcdir@/$$f $(DRIVERDest) ; done - echo "pkg_mkIndex -verbose $(DRIVERDest) *.tcl" | $(TCLSH_CMD) - - - -check-TESTS: - TCLLIBPATH="@prefix@/TclLibs @libdir@ @srcdir@" HERE=@srcdir@ tcl=@TCLSH_CMD@ @TCLSH_CMD@ @srcdir@/tclTests.tcl - -EXTRA_DIST=$(TCLDRIVERS) tclTests.tcl $(TCLTESTS) - Copied: tags/nscldaq-11.0-019/base/tclutils/Makefile.am (from rev 5143, trunk/main/base/tclutils/Makefile.am) =================================================================== --- tags/nscldaq-11.0-019/base/tclutils/Makefile.am (rev 0) +++ tags/nscldaq-11.0-019/base/tclutils/Makefile.am 2015-11-13 14:42:32 UTC (rev 5145) @@ -0,0 +1,19 @@ + +DRIVERDest=@prefix@/TclLibs/tclutils + +TCLDRIVERS= Utils.tcl BlockCompleter.tcl TclSourceFilter.tcl Process.tcl +TCLTESTS= utils.test blockcompleter.test tclsourcefilter.test + +install-exec-local: + $(mkinstalldirs) @prefix@/TclLibs + $(mkinstalldirs) $(DRIVERDest) + for f in $(TCLDRIVERS); do $(INSTALL_SCRIPT) @srcdir@/$$f $(DRIVERDest) ; done + echo "pkg_mkIndex -verbose $(DRIVERDest) *.tcl" | $(TCLSH_CMD) + + + +check-TESTS: + TCLLIBPATH="@prefix@/TclLibs @libdir@ @srcdir@" HERE=@srcdir@ tcl=@TCLSH_CMD@ @TCLSH_CMD@ @srcdir@/tclTests.tcl + +EXTRA_DIST=$(TCLDRIVERS) tclTests.tcl $(TCLTESTS) + Copied: tags/nscldaq-11.0-019/base/tclutils/Process.tcl (from rev 5143, trunk/main/base/tclutils/Process.tcl) =================================================================== --- tags/nscldaq-11.0-019/base/tclutils/Process.tcl (rev 0) +++ tags/nscldaq-11.0-019/base/tclutils/Process.tcl 2015-11-13 14:42:32 UTC (rev 5145) @@ -0,0 +1,80 @@ +# +# You may use this software under the terms of the GNU public license +# (GPL). The terms of this license are described at: +# +# http://www.gnu.org/licenses/gpl.txt +# +# Authors: +# NSCLDAQ Development Group +# +# NSCL +# Michigan State University +# East Lansing, MI 48824-1321 + +# This software is Copyright by the Board of Trustees of Michigan +# State University (c) Copyright 2015. + +# @file Process.tcl +# @author Jeromy Tompkins +# +# ############################################################ + + +package provide Process 1.0 + +package require snit + +## @brief Encapsulation of a pipeline process +# +# This provides the user with a simple way to handle +# pipelines. The -oneof option is a callback that allows +# user-defined code to execute when the channel is closed. +# +# It is not possible to open more than one channel per +# instance of this snit::type. +# +snit::type Process { + option -command {} + option -oneof {} + + variable fd {} + + ## @brief Open the pipeline and register the readable callback + constructor {args} { + $self configurelist $args + + set fd [open "| $options(-command) |& cat" r] + chan configure $fd -blocking 0 + chan configure $fd -buffering line + chan event $fd readable [mymethod onReadable $fd] + } + + ## Close the open channel if it is still open + destructor { + if {$fd ne {}} { + catch {close $fd} + } + } + + ## @brief Callback for readable events on the open pipe + # + # If the channel is not at an EOF condition, this simply + # prints the output to stdout. Otherwise, the script specified + # by the -oneof (i.e. on end-of-file) option is executed in + # the global scope. + method onReadable channel { + chan gets $channel line + if {[eof $channel]} { + catch {close $channel} + set fd {} + uplevel #0 $options(-oneof) + } else { + puts $line + } + } + + ## @brief Retrieve the pids of the processes in the pipeline + method getPIDs {} { + return [pid $fd] + } +} Deleted: tags/nscldaq-11.0-019/daq/actions/actions.tcl =================================================================== --- trunk/main/daq/actions/actions.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ tags/nscldaq-11.0-019/daq/actions/actions.tcl 2015-11-13 14:42:32 UTC (rev 5145) @@ -1,205 +0,0 @@ -# actions.tcl -# -# A tcl package to handle the parsing of a basic messaging protocol -# to allow communication between devices in a pipeline and the ReadoutGUI. -# -# Things that need to be fixed. -# - Need to fix the leaking of the process. -# - sometimes a newline is prepended to an output and that needs to be -# fixed. -# - - -package provide Actions 1.0 -package require snit - - -snit::type Actions { - - variable line "" - variable incomplete 0 - variable errors [dict create 0 " unable to parse directive"] - variable legalDirectives {ERRMSG LOGMSG WRNMSG TCLCMD OUTPUT DBGMSG} - variable directiveMap { ERRMSG 0 LOGMSG 1 WRNMSG 2 - TCLCMD 3 OUTPUT 4 DBGMSG 5} - - option -actionbundle -default DefaultActions - - constructor {args} { - $self configurelist $args - } - - method onReadable {fd} { - set incomplete 0 - - if { [eof $fd] } { - # unregister itself - chan event $fd readable "" - - # we have reached an end of file - # - # convert to blocking to retrieve the exit status - if {0} { - chan configure $fd -blocking 1 - - if {[catch {close $fd} msg]} { - if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { - puts stderr "Child process exited abnormally with status: $::errorCode" - } - } - } - } else { - $self handleReadable $fd - } - } - - method getLine {} { return $line } - method setLine {str} { set line $str } - - method handleReadable {fd} { - - set incomplete 0 - - # read what the channel has to give us - set input [chan read $fd ] - - append line "$input" - set line [string trimright $line "\0\n"] - - set result {} - while {[string length $line]>0 && !($incomplete)} { - set firstWord [$self extractFirstWord $line] - - # if we have a legal directive, treat it - # as a packet - if {[$self isLegalDirective $firstWord]} { - set parsedLine [$self buildPacket ] - if {"$parsedLine" ne ""} { - set incomplete 0 - set result [$self handleMessage $parsedLine] - } - } else { - set result [$self handleNonPacket] - } - }; # end of nonzero input - - return $result - } - - method extractFirstWord {sentence} { - return [string range $sentence 0 5] - } - - # The first word was detected as a legal directive so - # we expect that there is a well formed packet. Try to - # read the whole thing. If the full packet isn't there, - # return a null string and move on. - # If the packet is found, truncate "line" so that the - # packet is no longer being outputted. - method buildPacket {} { - - set incomplete 1 - - # find first and second word boundaries - set b1 [string first { } $line 0] - if {$b1 == -1} return - set b2 [string first { } $line [expr $b1+1]] - if {$b2 == -1} return - - set pktSize [string trim [string range $line $b1 $b2] { \n}] - set totalLength [string length $line] - set remChars [expr $totalLength - ($b2+1)] - - if {$remChars >= $pktSize} { - set b3 [expr $b2+$pktSize] - lappend parsedLine [$self extractFirstWord $line] - lappend parsedLine [string range $line [expr $b2+1] $b3] - lappend parsedLine [string range $line [expr $b1+1] [expr $b2-1]] - - set incomplete 0 - set line [string range $line [expr $b3+1] end] - - return $parsedLine - } else { - return "" - } - - } - - # Deal with non packet output... we simply output - # everything we have up until a valid directive is - # found - # if we find a directive, output everything up to that - # directive, pop the outputted msg from the front of line, - # return. - - method handleNonPacket {} { - - # Check if line contains any legal directives - foreach dir $legalDirectives { - set index [string first $dir $line] - if {$index != -1} { - set msg [string range $line 0 [expr $index-1]] - set line [string range $line $index end] - - return [$self handleOutput $msg] - - } - } - - # if we are here then we didn't find any directives - set result [$self handleOutput $line] - set line "" - return $result - } - - # Determine if there word is a legal directive - method isLegalDirective {word} { - return [expr {$word in $legalDirectives}] - } - - # Jump-table of sorts for passing various - # handlers to their handlers - method handleMessage {parsedLine} { - - set directive [lindex $parsedLine 0] - set msg [lindex $parsedLine 1] - set dirId [dict get $directiveMap $directive] - set result {} - switch $dirId { - 0 { set result [$self handleError $msg ] } - 1 { set result [$self handleLog $msg ]} - 2 { set result [$self handleWarning $msg ] } - 3 { set result [$self handleTclCommand $msg ]} - 4 { set result [$self handleOutput $msg] } - 5 { set result [$self handleDebug $msg] } - } - - return $result - } - - method handleError {str} { - return [$options(-actionbundle) handleError $str] - } - - method handleLog {str} { - return [$options(-actionbundle) handleLog $str] - } - - method handleWarning {str} { - return [$options(-actionbundle) handleWarning $str] - } - - method handleDebug {str} { - return [$options(-actionbundle) handleDebug $str] - } - - method handleOutput {str} { - return [$options(-actionbundle) handleOutput $str] - } - - method handleTclCommand {str} { - return [$options(-actionbundle) handleTclCommand $str] - } -} - Copied: tags/nscldaq-11.0-019/daq/actions/actions.tcl (from rev 5143, trunk/main/daq/actions/actions.tcl) =================================================================== --- tags/nscldaq-11.0-019/daq/actions/actions.tcl (rev 0) +++ tags/nscldaq-11.0-019/daq/actions/actions.tcl 2015-11-13 14:42:32 UTC (rev 5145) @@ -0,0 +1,344 @@ +# actions.tcl +# +# A tcl package to handle the parsing of a basic messaging protocol +# to allow communication between devices in a pipeline and the ReadoutGUI. +# +# Things that need to be fixed. +# - Need to fix the leaking of the process. +# - sometimes a newline is prepended to an output and that needs to be +# fixed. +# + + +package provide Actions 1.0 +package require snit + + +## +# A TCL-side parser for reading messages out of a pipeline enabled +# for reading. This aims to handle messages that are bookended with +# newline characters and will not work properly if messages do not +# follow that rule. Within that framework, this will identify +# packets that are formed by the C++ functions in the Actions namespace. +# These have the form "DIRECTIVE size message", where DIRECTIVE is either +# ERRMSG, LOGMSG, WRNMSG, TCLCMD, OUTPUT, or DBGMSG. Any other message +# that is not in this form will be treated as output. +# +# This snit::type only handles the parsing stage of the message handling. +# What is actually done with the messages after parsing is entirely up +# to the user and definable via a callback bundle (-actionbundle). By +# default, a callback bundle is provided and used that will work with +# the ReadoutGUI logging mechanism for formatting data. +snit::type Actions { + + variable accumulatedInput "" ;#< message data received for parsing, split into a list by newlines + variable accumulatedOutMsg "" ;#< message being formed as a packet to output + variable incomplete 0 ;#< flag identifying if processing ended with an incomplete packet + variable errors [dict create 0 " unable to parse directive"] + variable legalDirectives {ERRMSG LOGMSG WRNMSG TCLCMD OUTPUT DBGMSG} + variable directiveMap { ERRMSG 0 LOGMSG 1 WRNMSG 2 + TCLCMD 3 OUTPUT 4 DBGMSG 5} + + option -actionbundle -default DefaultActions ;#< callback bundle + + constructor {args} { + $self configurelist $args + } + + ## \brief Method for responding to readable events on pipes + # + # This is really the entry point to this whole business. It + # deals with eof conditions properly. Usually it just delegates + # to the handleReadable method + # + # \param fd the file channel to read from + method onReadable {fd} { + + if { [eof $fd] } { + # unregister itself + chan event $fd readable "" + + # we have reached an end of file + # + # convert to blocking to retrieve the exit status + chan configure $fd -blocking 1 + + if {[catch {close $fd} msg]} { + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + puts stderr "Child process exited abnormally with status: $::errorCode" + } + } + } else { + $self handleReadable $fd + } + } + + method getLine {} { return $accumulatedInput } + method setLine {str} { set accumulatedInput $str } + + ## \brief Reads input from the channel and processes it + # + # \param fd the channel to read from + method handleReadable {fd} { + + # read what the channel has to give us, this does not terminate in + # a newline if there was none to begin with. + set input [chan read $fd ] + + return [$self processInput $input] + } + + ## Adjust the number of lines we have to process + # + # We need to be careful about not processing the last line of the message + # in case it did not end in a newline character. By not ending in a newline + # character, that means we do not have a complete message and should + # adjust the number of lines to process so that the last line is excluded. + method computeNLinesToProcess {nLines strippedNewline firstLine} { + if {(! $strippedNewline)} { + #puts "did not strip newline" + #puts "nLines=$nLines, firstLine=\"$firstLine\", isLegalDir=[$self isLegalDirective [$self extractFirstWord $firstLine]]" + if {($nLines != 1) + || !([$self isLegalDirective [$self extractFirstWord $firstLine]]) + || ([string length $firstLine]<6)} { + #puts "adjusting number of lines" + incr nLines -1 + } + } + + return $nLines + } + + + ## The logic for parsing the messages + # + # This has become embarrassingly complicated... but it is not reasonable to rewrite. + # Parsing is not a trivial task. + # + # The idea here is that we are maintaining a list of lines that were separated by + # newline characters. Packets may be contained in a single line or may consist of multiple lines. + # The packet message that is being formed is therefore part of the state of the + # snit::type and is appended to until it is determined complete. + # + # Once a packet is completed, it is added to a list of results. You can imagine that the + # possibility exists to have multiple packets to deal with if we are not line buffering. + # In that case, we keep adding complete packets to our list until all viable text has + # been processed and then the packets are processed at the end. + method processInput input { + #puts "processing input: \"$input\"" + + if {$incomplete} { + #puts "last was incomplete and we start with : \"$accumulatedInput\"" + set input "[lindex $accumulatedInput end]$input" + set accumulatedInput {} + } + + set strippedNewline 0 + set result {} + + # pop a single newline character off of the end if it exists to avoid + # an empty line at the end caused by the split command + if {[string index $input end] eq "\n"} { + set input [string range $input 0 end-1] + set strippedNewline 1 + #puts "stripped the newline!" + } + + set accumulatedInput [concat $accumulatedInput [split $input "\n"]] + #puts "accumulatedInput: \"$accumulatedInput\"" + + # we need to iterate over all lines that are present at the start + # so we will iterate over a copy of accumulatedInput because + # the accumulatedInput list gets manipulated as we go along + set linesToProcess $accumulatedInput + set nLines [llength $linesToProcess] + if {$nLines == 0} {incr nLines} + set firstLine [lindex $linesToProcess 0] + + # adjust the number of lines to process in case we believe the last line is incomplete + set nLinesToProcess [$self computeNLinesToProcess $nLines $strippedNewline $firstLine] + #puts "nLines: $nLines, nLinesToProcess: $nLinesToProcess" + + # process the lines of data + for {set index 0} {$index<$nLinesToProcess} {incr index} { + + set line [lindex $linesToProcess $index] + + + # correct for the removal of newlines during the split command + if {($index == [expr $nLines-1]) && !$incomplete} { + # if we are processing all of the original lines, then that implies the + # message we are working with is considered a complete message + append accumulatedOutMsg "$line" + } else { + # because we are here, we are in the middle of a message, and it is possible + # that we had newlines in the middle of the message. Make sure to add back the newline character + #that + append accumulatedOutMsg "$line\n" + } + + # pop off the current line from accumulatedInput + set accumulatedInput [lreplace $accumulatedInput 0 0] + + #puts "line: \"$line\", accumulatedOutMsg: \"$accumulatedOutMsg\", input: \"$accumulatedInput\", incomplete=$incomplete" + + # if the first word is a legal directive then we will handle the + # message as a packet, otherwise it is some other entity + set firstWord [$self extractFirstWord $accumulatedOutMsg] + if {[$self isLegalDirective $firstWord]} { + #puts "Found a directive" + set parsedLine [$self buildPacket $accumulatedOutMsg] + if {$parsedLine ne ""} { + set incomplete 0 + lappend result $parsedLine + set accumulatedOutMsg {} + } ;# else move to next line and handle it + } else { + #puts "Found a non packet" + set parsedLine [$self handleNonPacket $accumulatedOutMsg] + if {$parsedLine ne {}} { + lappend result $parsedLine + if {[lindex $parsedLine 2] == [string length $accumulatedOutMsg]} { + set accumulatedOutMsg {} + } else { + set accumulatedOutMsg [string range $accumulatedOutMsg [lindex $parsedLine 2] end] + } + } + } + } ;# end of for loop + + + # handle the messages! + set incomplete [expr !$strippedNewline] + #puts "result: \"$result\"" + set retval {} + foreach msg $result { + lappend retval [$self handleMessage $msg] + } + return $retval + } + + method extractFirstWord {sentence} { + return [string range $sentence 0 5] + } + + ## Parse msg that we have identified to begin with a directive + # + # The first word was detected as a legal directive so + # we expect that there is a well formed packet. Try to + # read the whole thing. If the full packet isn't there, + # return a null string and move on. + # If the packet is found, truncate "line" so that the + # packet is no longer being outputted. + # + # \param content the accumulated text to process starting with directive + method buildPacket {content} { + + set incomplete 1 + + # find first and second word boundaries + set b1 [string first { } $content 0] + if {$b1 == -1} return + set b2 [string first { } $content [expr $b1+1]] + if {$b2 == -1} return + + set pktSize [string trim [string range $content $b1 $b2] { \n}] + set totalLength [string length $content] + set remChars [expr $totalLength - ($b2+1)] + + if {$remChars >= $pktSize} { + set b3 [expr $b2+$pktSize] + lappend parsedLine [$self extractFirstWord $content] + lappend parsedLine [string range $content [expr $b2+1] $b3] + lappend parsedLine [string range $content [expr $b1+1] [expr $b2-1]] + + set incomplete 0 + set content [string range $content [expr $b3+1] end] + + return $parsedLine + } else { + return "" + } + + } + + ## Parse msg that we have identified NOT to begin with a directive + # + # Deal with non packet output... we simply output + # everything we have up until a valid directive is + # found. If we find a directive, output everything up to that + # directive, pop the outputted msg from the front of line, + # return. This is an attempt to handle malformed output that + # did not have a newline character. + # + # \param content the accumulated text to process + method handleNonPacket {content} { + + # handle the scenario when the line contains a directive somewhere + # in it + foreach dir $legalDirectives { + set index [string first $dir $content] + if {$index != -1} { + # we found a directive, output everything up to that directive + set msg [string range $content 0 [expr $index-1]] + set content [string range $content $index end] + + return [list OUTPUT $content [string length $content]] + } + } + + # if we are here then we didn't find any directives, output the whole line + set result [list OUTPUT $content [string length $content]] + return $result + } + + # Determine if there word is a legal directive + method isLegalDirective {word} { + return [expr {$word in $legalDirectives}] + } + + # Jump-table of sorts for passing various + # handlers to their handlers + method handleMessage {parsedLine} { + + set directive [lindex $parsedLine 0] + set msg [lindex $parsedLine 1] + set dirId [dict get $directiveMap $directive] + set result {} + switch $dirId { + 0 { set result [$self handleError $msg ] } + 1 { set result [$self handleLog $msg ]} + 2 { set result [$self handleWarning $msg ] } + 3 { set result [$self handleTclCommand $msg ]} + 4 { set result [$self handleOutput $msg] } + 5 { set result [$self handleDebug $msg] } + } + + return $result + } + + method handleError {str} { + return [$options(-actionbundle) handleError $str] + } + + method handleLog {str} { + return [$options(-actionbundle) handleLog $str] + } + + method handleWarning {str} { + return [$options(-actionbundle) handleWarning $str] + } + + method handleDebug {str} { + return [$options(-actionbundle) handleDebug $str] + } + + method handleOutput {str} { + return [$options(-actionbundle) handleOutput $str] + } + + method handleTclCommand {str} { + return [$options(-actionbundle) handleTclCommand $str] + } +} + Deleted: tags/nscldaq-11.0-019/daq/actions/actions.test =================================================================== --- trunk/main/daq/actions/actions.test 2015-11-13 10:42:07 UTC (rev 5142) +++ tags/nscldaq-11.0-019/daq/actions/actions.test 2015-11-13 14:42:32 UTC (rev 5145) @@ -1,242 +0,0 @@ - -package require Actions 1.0 -package require tcltest - -set ::fullPath [tcltest::makeDirectory test] - -tcltest::test buildPktERR {Test that ERRMSG directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "ERRMSG 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {ERRMSG abcdefghij 10} - -tcltest::test buildPktLOG {Test that LOGMSG directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "LOGMSG 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {LOGMSG abcdefghij 10} - -tcltest::test buildPktWRN {Test that WRNMSG directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "WRNMSG 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {WRNMSG abcdefghij 10} - -tcltest::test buildPktTCLCMD {Test that TCLCMD directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "TCLCMD 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {TCLCMD abcdefghij 10} - -tcltest::test buildPktOUTPUT {Test that OUTPUT directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "OUTPUT 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {OUTPUT abcdefghij 10} - -tcltest::test buildPktDBGMSG {Test that DBGMSG directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "DBGMSG 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {DBGMSG abcdefghij 10} - - -tcltest::test buildPktIncomplete {Test that packet building stops on incomplete pkt -} -setup { - set action [::Actions %AUTO%] - $action setLine "DBGMSG 16 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {} - - -tcltest::test buildPktWithNewline {Test that packet is handled with internal newlines -} -setup { - set action [::Actions %AUTO%] - $action setLine {OUTPUT 4 a - -b} -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {OUTPUT {a - -b} 4} - -tcltest::test buildPktWithMultiDirs {Test that only first packet outputted if multiple are present -} -setup { - set action [::Actions %AUTO%] - $action setLine {OUTPUT 4 abcd OUTPUT 4 efgh OUTPUT 4 ijkl} -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {OUTPUT abcd 4} - -namespace eval testHandlers { - variable line {} - proc handleLog msg { variable line; set line "log $msg"} - proc handleError msg { variable line; set line "error $msg"} - proc handleWarning msg { variable line; set line "warning $msg"} - proc handleTclCommand msg { variable line; set line "tcl $msg"} - proc handleOutput msg { variable line; set line "output $msg"} - proc handleDebug msg { variable line; set line "debug $msg"} - - namespace export handleLog handleError handleWarning \ - handleTclCommand handleOutput handleDebug - namespace ensemble create -} - -tcltest::test buildPktSmushed-0 {Test that dropped whitespace get handled -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - - set read0Path [tcltest::makeFile "LOGMSG \n" test0.txt $fullPath] - set read1Path [tcltest::makeFile "4 \n" test1.txt $fullPath] - set read2Path [tcltest::makeFile "asdf\n" test2.txt $fullPath] - set read0 [open $read0Path r] - set read1 [open $read1Path r] - set read2 [open $read2Path r] - set ::testHandlers::line {} -} -cleanup { - $action destroy - close $read0 - close $read1 - close $read2 -} -body { - $action handleReadable $read0 - $action handleReadable $read1 - $action handleReadable $read2 - set ::testHandlers::line -} -result "log asdf" ;# we will have to live with the fact that there is a blank line -# emitted that gets registered as an output line. This should at least not break. - - -tcltest::test handleNonPktNoDirective {Test that fully non-directive data is properly handled -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - $action setLine "abcdefghij" - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - $action handleNonPacket - set ::testHandlers::line -} -result {output abcdefghij} - -tcltest::test handleNonPktWithDirective {Test that directive data is properly handled -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - $action setLine "abcdefERRMSG 4 ghij" - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - $action handleNonPacket - set ::testHandlers::line -} -result {output abcdef} - - -tcltest::test handleMessageLOG {test handleDirective for LOGMSG -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list LOGMSG {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {log my message} - -tcltest::test handleMessageERROR {test handleDirective for ERRMSG -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list ERRMSG {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {error my message} - -tcltest::test handleMessageWRN {test handleDirective for WRNMSG -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list WRNMSG {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {warning my message} - -tcltest::test handleMessageTCLCMD {test handleDirective for TCLCMD -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list TCLCMD {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {tcl my message} - - -tcltest::test handleMessageOUTPUT {test handleDirective for OUTPUT -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list OUTPUT {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {output my message} - -tcltest::test handleMessageDBG {test handleDirective for DBGMSG -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list DBGMSG {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {debug my message} - - - -tcltest::cleanupTests Copied: tags/nscldaq-11.0-019/daq/actions/actions.test (from rev 5143, trunk/main/daq/actions/actions.test) =================================================================== --- tags/nscldaq-11.0-019/daq/actions/actions.test (rev 0) +++ tags/nscldaq-11.0-019/daq/actions/actions.test 2015-11-13 14:42:32 UTC (rev 5145) @@ -0,0 +1,284 @@ + +package require Actions 1.0 +package require tcltest + +set ::fullPath [tcltest::makeDirectory test] + +tcltest::test buildPktERR {Test that ERRMSG directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "ERRMSG 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {ERRMSG abcdefghij 10} + +tcltest::test buildPktLOG {Test that LOGMSG directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "LOGMSG 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {LOGMSG abcdefghij 10} + +tcltest::test buildPktWRN {Test that WRNMSG directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "WRNMSG 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {WRNMSG abcdefghij 10} + +tcltest::test buildPktTCLCMD {Test that TCLCMD directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "TCLCMD 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {TCLCMD abcdefghij 10} + +tcltest::test buildPktOUTPUT {Test that OUTPUT directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "OUTPUT 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {OUTPUT abcdefghij 10} + +tcltest::test buildPktDBGMSG {Test that DBGMSG directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "DBGMSG 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {DBGMSG abcdefghij 10} + + +tcltest::test buildPktIncomplete {Test that packet building stops on incomplete pkt +} -setup { + set action [::Actions %AUTO%] + set line "DBGMSG 16 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {} + + +tcltest::test buildPktWithNewline {Test that packet is handled with internal newlines +} -setup { + set action [::Actions %AUTO%] + set line {OUTPUT 4 a + +b} +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {OUTPUT {a + +b} 4} + +tcltest::test buildPktWithMultiDirs {Test that only first packet outputted if multiple are present +} -setup { + set action [::Actions %AUTO%] + set line {OUTPUT 4 abcd +OUTPUT 4 efgh +OUTPUT 4 ijkl} +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {OUTPUT abcd 4} + +namespace eval testHandlers { + variable line {} + proc handleLog msg { variable line; append line "log \"$msg\""} + proc handleError msg { variable line; append line "error \"$msg\""} + proc handleWarning msg { variable line; append line "warning \"$msg\""} + proc handleTclCommand msg { variable line; append line "tcl \"$msg\""} + proc handleOutput msg { variable line; append line "output \"$msg\""} + proc handleDebug msg { variable line; append line "debug \"$msg\""} + + namespace export handleLog handleError handleWarning \ + handleTclCommand handleOutput handleDebug + namespace ensemble create +} + +tcltest::test buildPktWithNewlines {Test that packet ending with newline works +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + $action setLine "" +} -cleanup { + $action destroy +} -body { + puts "test" + $action processInput " \nTCL" + $action processInput "CMD 3 end\n" + + set ::testHandlers::line +} -result {output " +"tcl "end"} + +tcltest::test buildPktSmushed-0 {Test that dropped whitespace get handled +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + puts "\n******** test2" + $action processInput "LOGMSG " + $action processInput "4 " + $action processInput "asdf\n" + + set ::testHandlers::line +} -result "log \"asdf\"" ;# we will have to live with the fact that there is a blank line +# emitted that gets registered as an output line. This should at least not break. + + +tcltest::test handleNonPktNoDirective {Test that fully non-directive data is properly handled +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set line "abcdefghij\n" + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput $line + set ::testHandlers::line +} -result {output "abcdefghij"} + +tcltest::test handleNonPktWithDirective {Test that directive data is properly handled +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set line "abcdef\nERRMSG 4 ghij\n" + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput $line + set ::testHandlers::line +} -result {output "abcdef +"error "ghij"} + +tcltest::test handlePainfulMessage {Test that directive data is properly handled +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput "\n" + $action processInput "T" + $action processInput "CL" + $action processInput "C" + $action processInput "M" + $action processInput "D" + $action processInput " " + $action processInput "16 " + $action processInput "puts \"mean msg\n" + $action processInput "\"\n" + set ::testHandlers::line +} -result {output ""tcl "puts "mean msg +""} + +tcltest::test handleSingleNewlineMessage {Test that we can produce a simple newline msg +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput "\n" + set ::testHandlers::line +} -result {output ""} + +tcltest::test handleMessageLOG {test handleDirective for LOGMSG +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list LOGMSG {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {log "my message"} + +tcltest::test handleMessageERROR {test handleDirective for ERRMSG +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list ERRMSG {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {error "my message"} + +tcltest::test handleMessageWRN {test handleDirective for WRNMSG +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list WRNMSG {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {warning "my message"} + +tcltest::test handleMessageTCLCMD {test handleDirective for TCLCMD +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list TCLCMD {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {tcl "my message"} + + +tcltest::test handleMessageOUTPUT {test handleDirective for OUTPUT +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list OUTPUT {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {output "my message"} + +tcltest::test handleMessageDBG {test handleDirective for DBGMSG +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list DBGMSG {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {debug "my message"} + + + +tcltest::cleanupTests Deleted: tags/nscldaq-11.0-019/daq/eventbuilder/endrunmon.tcl =================================================================== --- trunk/main/daq/eventbuilder/endrunmon.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ tags/nscldaq-11.0-019/daq/eventbuilder/endrunmon.tcl 2015-11-13 14:42:32 UTC (rev 5145) @@ -1,293 +0,0 @@ -#!/bin/sh -# -*- tcl -*- -# The next line is executed by /bin/sh, but not tcl \ -exec tclsh "$0" ${1+"$@"} - -# This software is Copyright by the Board of Trustees of Michigan -# State University (c) Copyright 2014. -# -# You may use this software under the terms of the GNU public license -# (GPL). The terms of this license are described at: -# -# http://www.gnu.org/licenses/gpl.txt -# -# Authors: -# Ron Fox -# Jeromy Tompkins -# NSCL -# Michigan State University -# East Lansing, MI 48824-1321 - - - -## -# @file endrunmon.tcl -# @brief Monitor rings for end of run. -# @author Ron Fox <fo...@ns...> -# - -## -# This file contains the EndrunMon package. It provides an API/implementation -# that can monitor a ring for a specific number of end runs. When these -# are seen, a condition variable is signalled and the thread doing the monitoring -# exits. -# -# API: -# * startMonitor - begins the end run monitor thread. -# * setEndRunCount - Sets the number of end run items expected. -# * incEndRunCount - Increments the number of end run items expected -# * decEndRunCount - Decrements the number of end run items expected. -# * waitEndRun - Blocks until the end run items required have been seen. -# * abort - Abort the end run thread after next item. -# - -package provide EndrunMon 1.0 -package require Thread -package require evbcallouts -package require RunstateMachine -package require ui - -## -# Create the namespace and any variables needed in the parent thread. -# -namespace eval ::EndrunMon { - variable mutex [thread::mutex create] - variable condVar [thread::cond create] - variable tid "" -} -## -# Create the thread shared variables we need. They are elements of the varname -# EndrunMon -# - -tsv::set EndrunMon endsExpected 0; # Number of end runs expected. -tsv::set EndrunMon abort 0; # Set nonzero to abort thread. - - -## -# setEndRunCount -# Sets the number of end run items expected by the monitor thread. This can be -# dynamically modified by the monitor which will signal when the number it has -# seen is >= the number requested. -# -# @param value - new number of end runs expected. -# -proc EndrunMon::setEndRunCount value { - tsv::set EndrunMon endsExpected $value -} -## -# incEndRunCount -# Increment the number of end runs expected by the monitor thread. -# -proc EndrunMon::incEndRunCount {} { - tsv::incr EndrunMon endsExpected -} -## -# decEndRunCount -# Decrement the number of end runs expected by the monitor thread. -# -proc EndrunMon::decEndRunCount {} { - tsv::incr EndrunMon endsExpected -1 -} - -## -# startMonitor -# Start the monitor thread. -# - It is an error to do this when the thread is already active -# (nonempty tid) -# - The mutex is taken. We don't release it until we -# wait for the condvar in waitEndRun so that the signal can't happen -# before we wait. -# -# @param ringUrl - the URI of the ring to be monitored. -# - -proc EndrunMon::startMonitor ringUrl { - if {$::EndrunMon::tid ne ""} { - error "Monitor thread is already active!" - } - thread::mutex lock $::EndrunMon::mutex - - # - # Create the thread, send it our auto path and - # get it to require the packages it needs: - # - - set EndrunMon::tid [thread::create -joinable] - thread::send $::EndrunMon::tid [list set auto_path $::auto_path] - thread::send $::EndrunMon::tid { - package require Thread - package require TclRingBuffer - } - # Send the proc that is the thread's action: - - thread::send $::EndrunMon::tid { - ## - # monitorRing - # takes begin/end data from a ring. - # when the nesting level goes to zero, signal the cond var. - # - # @param ringurl - Url for the ring to monitor - # @param mutex - mutex handle that guards the condvar. - # @param condvar - condition variable handle to signal. - # - proc ::monitorRing {ringurl mutex condvar} { - ring attach $ringurl - set ercount 0 - while {1} { - set item [ring get $ringurl [list 2]]; #end run only. - if {[dict get $item type] eq "End Run"} { - incr ercount - # - # Signal if we've seen enough end runs. - # - if {$ercount >= [tsv::get EndrunMon endsExpected]} { - thread::mutex lock $mutex - thread::cond notify $condvar - thread::mutex unlock $mutex - break - } - # - # Handle requests to abort without signalling. - # - if {[tsv::get EndrunMon abort]} { - break - } - } - } - - ring detach $ringurl - tsv::set EndrunMon abort 0; # in case we were aborted. - thread::release - } - } - thread::send -async $::EndrunMon::tid [list monitorRing $ringUrl $EndrunMon::mutex $::EndrunMon::condVar] - -} -## -# waitEndRun -# Wait for the end run to occur. -# This means -# - waiting for the monitor thread to signal the condition variable. -# - joining the thread (as it will exit soon after). -# -proc ::EndrunMon::waitEndRun {} { - if {$::EndrunMon::tid eq ""} { - error "Monitor thread was not started use EndrunMon::startMonitor to do so." - } - # Wait on the condition variable - # and on the thread exit. - # - - set ui [::RunControlSingleton::getInstance] - $ui configure -state disabled - - while {[thread::exists $::EndrunMon::tid]} { - thread::cond wait $EndrunMon::condVar $::EndrunMon::mutex 300 - update idletasks; #Keep UI alive. - } - # Thread exited so: - - thread::join $EndrunMon::tid - - # - # indicate the thread is gone and free the mutex. - # - set EndrunMon::tid "" - thread::mutex unlock $EndrunMon::mutex - - $ui configure -state normal -} -## -# abort -# Abort the monitor thread an wait for it to exit. -# we release the mutex first in case the last end run -# is arriving as we abort. -# -proc ::EndrunMon::abort {} { - if {$::EndrunMon::tid == ""} { - error "::EndrunMon::abort - monitor thread is not running." - } - tsv::set EndrunMon abort 1 - thread::mutex unlock $::EndrunMon::mutex - thread::join $::EndrunMon::tid - - # Mark the thread as non existent: - - set ::EndrunMon::tid "" -} -#---------------------------------------------------------------------------- -# EndunMon callout bundle. -# This section of code registers a callout bundle. Since in general it -# runs on package require it's going to be before the event builder's bundle. -# Here's the set of transitions we do: -# -# Leaving Halted -> Active: Start the monitor thread... -# Entering Halted from Active or Puased: Wait for the end run to complete. -# Entering NotReady - If the monitor thread is running, abort it. -# - -## -# attach -# Called when we are registered as a callback bundle -# We're not going to do anything. -# -# @param current - the current state. -# -proc EndrunMon::attach current { - -} - -## -# enter -# Called when a state is being entered. -# If Halted is being entered from Active or Paused, -# wait for the run to end if the monitor thread -# is active (if we attached in an active state, it won't be). -# If NotReady is entered from any other state, if the monitor thread -# is running abort it..and pray that we're going to be able to -# see something in the ring before the end of days. -# -# @param from - prior state -# @param to - state we are entering. -# -proc EndrunMon::enter {from to} { - - if {($to eq "Halted") && ($from in [list Active Paused])} { - if {$::EndrunMon::tid ne ""} { - ::EndrunMon::waitEndRun - } - } - if {$to eq "NotReady"} { - if {$::EndrunMon::tid ne ""} { - ::EndrunMon::abort - } - } -} -## -# leave -# A state is being left; -# Leaving Halted for Active starts the monitor thread. -# -# @param from - the state being left. -# @param to - the state being entered. -# -# @note EVBC::destRing contains the ring to monitor. -# TODO: Should really provide a mechanism to make this available that is -# not event builder specific. -# - -proc EndrunMon::leave {from to} { - if {($from eq "Halted") && ($to eq "Active") && ($::EndrunMon::tid eq "")} { - set ring tcp://localhost/$::EVBC::destRing - ::EndrunMon::startMonitor $ring - } -} - -namespace eval EndrunMon { - namespace export enter leave attach -} - - -set sm [RunstateMachineSingleton %AUTO%] -$sm addCalloutBundle EndrunMon \ No newline at end of file Copied: tags/nscldaq-11.0-019/daq/eventbuilder/endrunmon.tcl (from rev 5143, trunk/main/daq/eventbuilder/endrunmon.tcl) =================================================================== --- tags/nscldaq-11.0-019/daq/eventbuilder/endrunmon.tcl (rev 0) +++ tags/nscldaq-11.0-019/daq/eventbuilder/endrunmon.tcl 2015-11-13 14:42:32 UTC (rev 5145) @@ -0,0 +1,305 @@ +#!/bin/sh +# -*- tcl -*- +# The next line is executed by /bin/sh, but not tcl \ +exec tclsh "$0" ${1+"$@"} + +# This software is Copyright by the Board of Trustees of Michigan +# State University (c) Copyright 2014. +# +# You may use this software under the terms of the GNU public license +# (GPL). The terms of this license are described at: +# +# http://www.gnu.org/licenses/gpl.txt +# +# Authors: +# Ron Fox +# Jeromy Tompkins +# NSCL +# Michigan State University +# East Lansing, MI 48824-1321 + + + +## +# @file endrunmon.tcl +# @brief Monitor rings for end of run. +# @author Ron Fox <fo...@ns...> +# + +## +# This file contains the EndrunMon package. It provides an API/implementation +# that can monitor a ring for a specific number of end runs. When these +# are seen, a condition variable is signalled and the thread doing the monitoring +# exits. +# +# API: +# * startMonitor - begins the end run monitor thread. +# * setEndRunCount - Sets the number of end run items expected. +# * incEndRunCount - Increments the number of end run items expected +# * decEndRunCount - Decrements the number of end run items expected. +# * waitEndRun - Blocks until the end run items required have been seen. +# * abort - Abort the end run thread after next item. +# + +package provide EndrunMon 1.0 +package require Thread +package require evbcallouts +package require RunstateMachine +package require ui + +## +# Create the namespace and any variables needed in the parent thread. +# +namespace eval ::EndrunMon { + variable mutex [thread::mutex create] + variable condVar [thread::cond create] + variable tid "" +} +## +# Create the thread shared variables we need. They are elements of the varname +# EndrunMon +# + +tsv::set EndrunMon endsExpected 0; # Number of end runs expected. +tsv::set EndrunMon abort 0; # Set nonzero to abort thread. + + +## +# setEndRunCount +# Sets the number of end run items expected by the monitor thread. This can be +# dynamically modified by the monitor which will signal when the number it has +# seen is >= the number requested. +# +# @param value - new number of end runs expected. +# +proc EndrunMon::setEndRunCount value { + tsv::set EndrunMon endsExpected $value +} +## +# incEndRunCount +# Increment the number of end runs expected by the monitor thread. +# +proc EndrunMon::incEndRunCount {} { + tsv::incr EndrunMon endsExpected +} +## +# decEndRunCount +# Decrement the number of end runs expected by the monitor thread. +# +proc EndrunMon::decEndRunCount {} { + tsv::incr EndrunMon endsExpected -1 +} + +## +# startMonitor +# Start the monitor thread. +# - It is an error to do this when the thread is already active +# (nonempty tid) +# - The mutex is taken. We don't release it until we +# wait for the condvar in waitEndRun so that the signal can't happen +# before we wait. +# +# @param ringUrl - the URI of the ring to be monitored. +# + +proc EndrunMon::startMonitor ringUrl { + if {$::EndrunMon::tid ne ""} { + error "Monitor thread is already active!" + } + thread::mutex lock $::EndrunMon::mutex + + # + # Create the thread, send it our auto path and + # get it to require the packages it needs: + # + + set EndrunMon::tid [thread::create -joinable] + thread::send $::EndrunMon::tid [list set auto_path $::auto_path] + thread::send $::EndrunMon::tid { + package require Thread + package require TclRingBuffer + } + # Send the proc that is the thread's action: + + thread::send $::EndrunMon::tid { + ## + # monitorRing + # takes begin/end data from a ring. + # when the nesting level goes to zero, signal the cond var. + # + # @param ringurl - Url for the ring to monitor + ... [truncated message content] |
From: <ro...@us...> - 2015-11-13 14:41:59
|
Revision: 5144 http://sourceforge.net/p/nscldaq/code/5144 Author: ron-fox Date: 2015-11-13 14:41:55 +0000 (Fri, 13 Nov 2015) Log Message: ----------- Create maintenance branch for 11.0 prior to merging 11.0 Added Paths: ----------- branches/nscdaq-11.0-maintenance/ branches/nscdaq-11.0-maintenance/base/ branches/nscdaq-11.0-maintenance/base/tclutils/Makefile.am branches/nscdaq-11.0-maintenance/base/tclutils/Process.tcl branches/nscdaq-11.0-maintenance/base/thread/ branches/nscdaq-11.0-maintenance/daq/ branches/nscdaq-11.0-maintenance/daq/actions/actions.tcl branches/nscdaq-11.0-maintenance/daq/actions/actions.test branches/nscdaq-11.0-maintenance/daq/eventbuilder/endrunmon.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/evbRdoCallouts.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/EVBConfigure.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/JobBuilderUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/JobConfigUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/JobProcessor.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/Makefile.am branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/MissingSourceUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/OfflineOrdererUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/RunProcessor.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/RunStatusUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/jobprocessor.test branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/offlineorderer.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/runprocessor.test branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/runstatusui.test branches/nscdaq-11.0-maintenance/daq/eventbuilder/ringSourceMgr.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/DataSourceMonitor.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/ReadoutGuiClient.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/RunstateMachine.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/eventLogBundle.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/multilogger.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/readoutGuiProvider.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/remoteControl.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/remotecontrol.test branches/nscdaq-11.0-maintenance/daq/readoutgui/s800.test branches/nscdaq-11.0-maintenance/daq/readoutgui/s800Provider.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/s800fake.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/ui.tcl branches/nscdaq-11.0-maintenance/daq/s800callouts/s800rctl.tcl branches/nscdaq-11.0-maintenance/sbs/ branches/nscdaq-11.0-maintenance/sbs/readout/CExperiment.cpp branches/nscdaq-11.0-maintenance/sbs/vmemodules/CModule32.h branches/nscdaq-11.0-maintenance/sbs/vmemodules/CSIS3820.h branches/nscdaq-11.0-maintenance/usb/ branches/nscdaq-11.0-maintenance/usb/ccusb/devices/CCamacCompat.hpp branches/nscdaq-11.0-maintenance/usb/ccusb/devices/CConfigurableObject.cpp branches/nscdaq-11.0-maintenance/usb/ccusb/router/COutputThread.cpp branches/nscdaq-11.0-maintenance/usb/common/configurableobject/CConfigurableObject.cpp branches/nscdaq-11.0-maintenance/usb/vmusb/controlpanels/AGD16XLM72Panel.tcl branches/nscdaq-11.0-maintenance/usb/vmusb/controlpanels/Makefile.am branches/nscdaq-11.0-maintenance/usb/vmusb/controlpanels/XLM72GateDelayControl.tcl branches/nscdaq-11.0-maintenance/usb/vmusb/controlpanels/client.tcl branches/nscdaq-11.0-maintenance/usb/vmusb/controlpanels/gd16_startup.png branches/nscdaq-11.0-maintenance/usb/vmusb/controlpanels/runStateObserver.tcl branches/nscdaq-11.0-maintenance/usb/vmusb/controlpanels/xlm72gatedelaycontrol.xml branches/nscdaq-11.0-maintenance/usb/vmusb/daqconfig/CConfiguration.cpp branches/nscdaq-11.0-maintenance/usb/vmusb/daqconfig/Makefile.am branches/nscdaq-11.0-maintenance/usb/vmusb/tcldrivers/AGD16XLM72.tcl branches/nscdaq-11.0-maintenance/utilities/ branches/nscdaq-11.0-maintenance/utilities/Makefile.am branches/nscdaq-11.0-maintenance/utilities/fileanalyzer/ Removed Paths: ------------- branches/nscdaq-11.0-maintenance/base/ branches/nscdaq-11.0-maintenance/base/tclutils/Makefile.am branches/nscdaq-11.0-maintenance/base/thread/ branches/nscdaq-11.0-maintenance/daq/ branches/nscdaq-11.0-maintenance/daq/actions/actions.tcl branches/nscdaq-11.0-maintenance/daq/actions/actions.test branches/nscdaq-11.0-maintenance/daq/eventbuilder/endrunmon.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/evbRdoCallouts.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/JobBuilderUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/JobConfigUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/JobProcessor.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/Makefile.am branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/MissingSourceUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/OfflineOrdererUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/RunProcessor.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/RunStatusUI.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/jobprocessor.test branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/offlineorderer.tcl branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/runprocessor.test branches/nscdaq-11.0-maintenance/daq/eventbuilder/offlineorderer/runstatusui.test branches/nscdaq-11.0-maintenance/daq/eventbuilder/ringSourceMgr.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/DataSourceMonitor.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/ReadoutGuiClient.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/RunstateMachine.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/eventLogBundle.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/multilogger.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/readoutGuiProvider.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/remoteControl.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/remotecontrol.test branches/nscdaq-11.0-maintenance/daq/readoutgui/s800.test branches/nscdaq-11.0-maintenance/daq/readoutgui/s800Provider.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/s800fake.tcl branches/nscdaq-11.0-maintenance/daq/readoutgui/ui.tcl branches/nscdaq-11.0-maintenance/daq/s800callouts/s800rctl.tcl branches/nscdaq-11.0-maintenance/sbs/ branches/nscdaq-11.0-maintenance/sbs/readout/CExperiment.cpp branches/nscdaq-11.0-maintenance/sbs/vmemodules/CModule32.h branches/nscdaq-11.0-maintenance/sbs/vmemodules/CSIS3820.h branches/nscdaq-11.0-maintenance/usb/ branches/nscdaq-11.0-maintenance/usb/ccusb/daqconfig/CCamacCompat.hpp branches/nscdaq-11.0-maintenance/usb/ccusb/devices/CCamacCompat.hpp branches/nscdaq-11.0-maintenance/usb/ccusb/devices/CConfigurableObject.cpp branches/nscdaq-11.0-maintenance/usb/ccusb/router/COutputThread.cpp branches/nscdaq-11.0-maintenance/usb/common/configurableobject/CConfigurableObject.cpp branches/nscdaq-11.0-maintenance/usb/vmusb/controlpanels/Makefile.am branches/nscdaq-11.0-maintenance/usb/vmusb/controlpanels/client.tcl branches/nscdaq-11.0-maintenance/usb/vmusb/daqconfig/CConfiguration.cpp branches/nscdaq-11.0-maintenance/usb/vmusb/daqconfig/Makefile.am branches/nscdaq-11.0-maintenance/usb/vmusb/tcldrivers/AGD16XLM72.tcl branches/nscdaq-11.0-maintenance/utilities/ branches/nscdaq-11.0-maintenance/utilities/Makefile.am Index: branches/nscdaq-11.0-maintenance =================================================================== --- trunk/main 2015-11-13 12:35:18 UTC (rev 5143) +++ branches/nscdaq-11.0-maintenance 2015-11-13 14:41:55 UTC (rev 5144) Property changes on: branches/nscdaq-11.0-maintenance ___________________________________________________________________ Added: svn:mergeinfo ## -0,0 +1,28 ## +/branches/11.0-s800conv-development:3453-4324 +/branches/11.0-s800conv-fixes:4745-4796 +/branches/feature-EVBMonitorThread:5008-5019 +/branches/feature-Post-GRETINA-Testrun:5034-5142 +/branches/features-nscldaq-11.0-014:5026-5066 +/branches/hira-sisstuff:2744-2997 +/branches/nextgen-ccusb-feature:2631-2641 +/branches/nextgen-ccusb-userdrivers-feature:2644-2659 +/branches/nextgen-vmusb-userdrivers-feature:2665-2711 +/branches/nscldaq-10.1-004-development:2714-2742 +/branches/nscldaq-10.2-001-development:2931-2998 +/branches/nscldaq-10.2-development:2749-2997 +/branches/nscldaq-11.0-000-development:4472-4669 +/branches/nscldaq-11.0-docs:4441-4445 +/branches/nscldaq-11.0-filter-development:3275-3450 +/branches/nscldaq-11.0-mdgg16:4328-4438 +/branches/nscldaq-11.0-rc12-development:3723-3888 +/branches/nscldaq-11.0-rc14:3900-3953 +/branches/nscldaq-11.0-rc15:3967-4096 +/branches/nscldaq-11.0-rc16:4105-4159 +/branches/nscldaq-11.0-rc17-development:4301-4372 +/branches/nscldaq-11.0-rc18:4395-4453 +/branches/nscldaq-11.x-mqdc:4448-4549 +/branches/revert-main:4668-4675 +/branches/vmusbremote-development:2803 +/tags/hira-sisstuff-pre-merge:2893-2918 +/tags/vmusbremote-working:2804-2816 +/trunk/nextgen:3002-3154 \ No newline at end of property Deleted: branches/nscdaq-11.0-maintenance/base/tclutils/Makefile.am =================================================================== --- trunk/main/base/tclutils/Makefile.am 2015-11-13 10:42:07 UTC (rev 5142) +++ branches/nscdaq-11.0-maintenance/base/tclutils/Makefile.am 2015-11-13 14:41:55 UTC (rev 5144) @@ -1,19 +0,0 @@ - -DRIVERDest=@prefix@/TclLibs/tclutils - -TCLDRIVERS= Utils.tcl BlockCompleter.tcl TclSourceFilter.tcl -TCLTESTS= utils.test blockcompleter.test tclsourcefilter.test - -install-exec-local: - $(mkinstalldirs) @prefix@/TclLibs - $(mkinstalldirs) $(DRIVERDest) - for f in $(TCLDRIVERS); do $(INSTALL_SCRIPT) @srcdir@/$$f $(DRIVERDest) ; done - echo "pkg_mkIndex -verbose $(DRIVERDest) *.tcl" | $(TCLSH_CMD) - - - -check-TESTS: - TCLLIBPATH="@prefix@/TclLibs @libdir@ @srcdir@" HERE=@srcdir@ tcl=@TCLSH_CMD@ @TCLSH_CMD@ @srcdir@/tclTests.tcl - -EXTRA_DIST=$(TCLDRIVERS) tclTests.tcl $(TCLTESTS) - Copied: branches/nscdaq-11.0-maintenance/base/tclutils/Makefile.am (from rev 5143, trunk/main/base/tclutils/Makefile.am) =================================================================== --- branches/nscdaq-11.0-maintenance/base/tclutils/Makefile.am (rev 0) +++ branches/nscdaq-11.0-maintenance/base/tclutils/Makefile.am 2015-11-13 14:41:55 UTC (rev 5144) @@ -0,0 +1,19 @@ + +DRIVERDest=@prefix@/TclLibs/tclutils + +TCLDRIVERS= Utils.tcl BlockCompleter.tcl TclSourceFilter.tcl Process.tcl +TCLTESTS= utils.test blockcompleter.test tclsourcefilter.test + +install-exec-local: + $(mkinstalldirs) @prefix@/TclLibs + $(mkinstalldirs) $(DRIVERDest) + for f in $(TCLDRIVERS); do $(INSTALL_SCRIPT) @srcdir@/$$f $(DRIVERDest) ; done + echo "pkg_mkIndex -verbose $(DRIVERDest) *.tcl" | $(TCLSH_CMD) + + + +check-TESTS: + TCLLIBPATH="@prefix@/TclLibs @libdir@ @srcdir@" HERE=@srcdir@ tcl=@TCLSH_CMD@ @TCLSH_CMD@ @srcdir@/tclTests.tcl + +EXTRA_DIST=$(TCLDRIVERS) tclTests.tcl $(TCLTESTS) + Copied: branches/nscdaq-11.0-maintenance/base/tclutils/Process.tcl (from rev 5143, trunk/main/base/tclutils/Process.tcl) =================================================================== --- branches/nscdaq-11.0-maintenance/base/tclutils/Process.tcl (rev 0) +++ branches/nscdaq-11.0-maintenance/base/tclutils/Process.tcl 2015-11-13 14:41:55 UTC (rev 5144) @@ -0,0 +1,80 @@ +# +# You may use this software under the terms of the GNU public license +# (GPL). The terms of this license are described at: +# +# http://www.gnu.org/licenses/gpl.txt +# +# Authors: +# NSCLDAQ Development Group +# +# NSCL +# Michigan State University +# East Lansing, MI 48824-1321 + +# This software is Copyright by the Board of Trustees of Michigan +# State University (c) Copyright 2015. + +# @file Process.tcl +# @author Jeromy Tompkins +# +# ############################################################ + + +package provide Process 1.0 + +package require snit + +## @brief Encapsulation of a pipeline process +# +# This provides the user with a simple way to handle +# pipelines. The -oneof option is a callback that allows +# user-defined code to execute when the channel is closed. +# +# It is not possible to open more than one channel per +# instance of this snit::type. +# +snit::type Process { + option -command {} + option -oneof {} + + variable fd {} + + ## @brief Open the pipeline and register the readable callback + constructor {args} { + $self configurelist $args + + set fd [open "| $options(-command) |& cat" r] + chan configure $fd -blocking 0 + chan configure $fd -buffering line + chan event $fd readable [mymethod onReadable $fd] + } + + ## Close the open channel if it is still open + destructor { + if {$fd ne {}} { + catch {close $fd} + } + } + + ## @brief Callback for readable events on the open pipe + # + # If the channel is not at an EOF condition, this simply + # prints the output to stdout. Otherwise, the script specified + # by the -oneof (i.e. on end-of-file) option is executed in + # the global scope. + method onReadable channel { + chan gets $channel line + if {[eof $channel]} { + catch {close $channel} + set fd {} + uplevel #0 $options(-oneof) + } else { + puts $line + } + } + + ## @brief Retrieve the pids of the processes in the pipeline + method getPIDs {} { + return [pid $fd] + } +} Deleted: branches/nscdaq-11.0-maintenance/daq/actions/actions.tcl =================================================================== --- trunk/main/daq/actions/actions.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ branches/nscdaq-11.0-maintenance/daq/actions/actions.tcl 2015-11-13 14:41:55 UTC (rev 5144) @@ -1,205 +0,0 @@ -# actions.tcl -# -# A tcl package to handle the parsing of a basic messaging protocol -# to allow communication between devices in a pipeline and the ReadoutGUI. -# -# Things that need to be fixed. -# - Need to fix the leaking of the process. -# - sometimes a newline is prepended to an output and that needs to be -# fixed. -# - - -package provide Actions 1.0 -package require snit - - -snit::type Actions { - - variable line "" - variable incomplete 0 - variable errors [dict create 0 " unable to parse directive"] - variable legalDirectives {ERRMSG LOGMSG WRNMSG TCLCMD OUTPUT DBGMSG} - variable directiveMap { ERRMSG 0 LOGMSG 1 WRNMSG 2 - TCLCMD 3 OUTPUT 4 DBGMSG 5} - - option -actionbundle -default DefaultActions - - constructor {args} { - $self configurelist $args - } - - method onReadable {fd} { - set incomplete 0 - - if { [eof $fd] } { - # unregister itself - chan event $fd readable "" - - # we have reached an end of file - # - # convert to blocking to retrieve the exit status - if {0} { - chan configure $fd -blocking 1 - - if {[catch {close $fd} msg]} { - if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { - puts stderr "Child process exited abnormally with status: $::errorCode" - } - } - } - } else { - $self handleReadable $fd - } - } - - method getLine {} { return $line } - method setLine {str} { set line $str } - - method handleReadable {fd} { - - set incomplete 0 - - # read what the channel has to give us - set input [chan read $fd ] - - append line "$input" - set line [string trimright $line "\0\n"] - - set result {} - while {[string length $line]>0 && !($incomplete)} { - set firstWord [$self extractFirstWord $line] - - # if we have a legal directive, treat it - # as a packet - if {[$self isLegalDirective $firstWord]} { - set parsedLine [$self buildPacket ] - if {"$parsedLine" ne ""} { - set incomplete 0 - set result [$self handleMessage $parsedLine] - } - } else { - set result [$self handleNonPacket] - } - }; # end of nonzero input - - return $result - } - - method extractFirstWord {sentence} { - return [string range $sentence 0 5] - } - - # The first word was detected as a legal directive so - # we expect that there is a well formed packet. Try to - # read the whole thing. If the full packet isn't there, - # return a null string and move on. - # If the packet is found, truncate "line" so that the - # packet is no longer being outputted. - method buildPacket {} { - - set incomplete 1 - - # find first and second word boundaries - set b1 [string first { } $line 0] - if {$b1 == -1} return - set b2 [string first { } $line [expr $b1+1]] - if {$b2 == -1} return - - set pktSize [string trim [string range $line $b1 $b2] { \n}] - set totalLength [string length $line] - set remChars [expr $totalLength - ($b2+1)] - - if {$remChars >= $pktSize} { - set b3 [expr $b2+$pktSize] - lappend parsedLine [$self extractFirstWord $line] - lappend parsedLine [string range $line [expr $b2+1] $b3] - lappend parsedLine [string range $line [expr $b1+1] [expr $b2-1]] - - set incomplete 0 - set line [string range $line [expr $b3+1] end] - - return $parsedLine - } else { - return "" - } - - } - - # Deal with non packet output... we simply output - # everything we have up until a valid directive is - # found - # if we find a directive, output everything up to that - # directive, pop the outputted msg from the front of line, - # return. - - method handleNonPacket {} { - - # Check if line contains any legal directives - foreach dir $legalDirectives { - set index [string first $dir $line] - if {$index != -1} { - set msg [string range $line 0 [expr $index-1]] - set line [string range $line $index end] - - return [$self handleOutput $msg] - - } - } - - # if we are here then we didn't find any directives - set result [$self handleOutput $line] - set line "" - return $result - } - - # Determine if there word is a legal directive - method isLegalDirective {word} { - return [expr {$word in $legalDirectives}] - } - - # Jump-table of sorts for passing various - # handlers to their handlers - method handleMessage {parsedLine} { - - set directive [lindex $parsedLine 0] - set msg [lindex $parsedLine 1] - set dirId [dict get $directiveMap $directive] - set result {} - switch $dirId { - 0 { set result [$self handleError $msg ] } - 1 { set result [$self handleLog $msg ]} - 2 { set result [$self handleWarning $msg ] } - 3 { set result [$self handleTclCommand $msg ]} - 4 { set result [$self handleOutput $msg] } - 5 { set result [$self handleDebug $msg] } - } - - return $result - } - - method handleError {str} { - return [$options(-actionbundle) handleError $str] - } - - method handleLog {str} { - return [$options(-actionbundle) handleLog $str] - } - - method handleWarning {str} { - return [$options(-actionbundle) handleWarning $str] - } - - method handleDebug {str} { - return [$options(-actionbundle) handleDebug $str] - } - - method handleOutput {str} { - return [$options(-actionbundle) handleOutput $str] - } - - method handleTclCommand {str} { - return [$options(-actionbundle) handleTclCommand $str] - } -} - Copied: branches/nscdaq-11.0-maintenance/daq/actions/actions.tcl (from rev 5143, trunk/main/daq/actions/actions.tcl) =================================================================== --- branches/nscdaq-11.0-maintenance/daq/actions/actions.tcl (rev 0) +++ branches/nscdaq-11.0-maintenance/daq/actions/actions.tcl 2015-11-13 14:41:55 UTC (rev 5144) @@ -0,0 +1,344 @@ +# actions.tcl +# +# A tcl package to handle the parsing of a basic messaging protocol +# to allow communication between devices in a pipeline and the ReadoutGUI. +# +# Things that need to be fixed. +# - Need to fix the leaking of the process. +# - sometimes a newline is prepended to an output and that needs to be +# fixed. +# + + +package provide Actions 1.0 +package require snit + + +## +# A TCL-side parser for reading messages out of a pipeline enabled +# for reading. This aims to handle messages that are bookended with +# newline characters and will not work properly if messages do not +# follow that rule. Within that framework, this will identify +# packets that are formed by the C++ functions in the Actions namespace. +# These have the form "DIRECTIVE size message", where DIRECTIVE is either +# ERRMSG, LOGMSG, WRNMSG, TCLCMD, OUTPUT, or DBGMSG. Any other message +# that is not in this form will be treated as output. +# +# This snit::type only handles the parsing stage of the message handling. +# What is actually done with the messages after parsing is entirely up +# to the user and definable via a callback bundle (-actionbundle). By +# default, a callback bundle is provided and used that will work with +# the ReadoutGUI logging mechanism for formatting data. +snit::type Actions { + + variable accumulatedInput "" ;#< message data received for parsing, split into a list by newlines + variable accumulatedOutMsg "" ;#< message being formed as a packet to output + variable incomplete 0 ;#< flag identifying if processing ended with an incomplete packet + variable errors [dict create 0 " unable to parse directive"] + variable legalDirectives {ERRMSG LOGMSG WRNMSG TCLCMD OUTPUT DBGMSG} + variable directiveMap { ERRMSG 0 LOGMSG 1 WRNMSG 2 + TCLCMD 3 OUTPUT 4 DBGMSG 5} + + option -actionbundle -default DefaultActions ;#< callback bundle + + constructor {args} { + $self configurelist $args + } + + ## \brief Method for responding to readable events on pipes + # + # This is really the entry point to this whole business. It + # deals with eof conditions properly. Usually it just delegates + # to the handleReadable method + # + # \param fd the file channel to read from + method onReadable {fd} { + + if { [eof $fd] } { + # unregister itself + chan event $fd readable "" + + # we have reached an end of file + # + # convert to blocking to retrieve the exit status + chan configure $fd -blocking 1 + + if {[catch {close $fd} msg]} { + if {[lindex $::errorCode 0] eq "CHILDSTATUS"} { + puts stderr "Child process exited abnormally with status: $::errorCode" + } + } + } else { + $self handleReadable $fd + } + } + + method getLine {} { return $accumulatedInput } + method setLine {str} { set accumulatedInput $str } + + ## \brief Reads input from the channel and processes it + # + # \param fd the channel to read from + method handleReadable {fd} { + + # read what the channel has to give us, this does not terminate in + # a newline if there was none to begin with. + set input [chan read $fd ] + + return [$self processInput $input] + } + + ## Adjust the number of lines we have to process + # + # We need to be careful about not processing the last line of the message + # in case it did not end in a newline character. By not ending in a newline + # character, that means we do not have a complete message and should + # adjust the number of lines to process so that the last line is excluded. + method computeNLinesToProcess {nLines strippedNewline firstLine} { + if {(! $strippedNewline)} { + #puts "did not strip newline" + #puts "nLines=$nLines, firstLine=\"$firstLine\", isLegalDir=[$self isLegalDirective [$self extractFirstWord $firstLine]]" + if {($nLines != 1) + || !([$self isLegalDirective [$self extractFirstWord $firstLine]]) + || ([string length $firstLine]<6)} { + #puts "adjusting number of lines" + incr nLines -1 + } + } + + return $nLines + } + + + ## The logic for parsing the messages + # + # This has become embarrassingly complicated... but it is not reasonable to rewrite. + # Parsing is not a trivial task. + # + # The idea here is that we are maintaining a list of lines that were separated by + # newline characters. Packets may be contained in a single line or may consist of multiple lines. + # The packet message that is being formed is therefore part of the state of the + # snit::type and is appended to until it is determined complete. + # + # Once a packet is completed, it is added to a list of results. You can imagine that the + # possibility exists to have multiple packets to deal with if we are not line buffering. + # In that case, we keep adding complete packets to our list until all viable text has + # been processed and then the packets are processed at the end. + method processInput input { + #puts "processing input: \"$input\"" + + if {$incomplete} { + #puts "last was incomplete and we start with : \"$accumulatedInput\"" + set input "[lindex $accumulatedInput end]$input" + set accumulatedInput {} + } + + set strippedNewline 0 + set result {} + + # pop a single newline character off of the end if it exists to avoid + # an empty line at the end caused by the split command + if {[string index $input end] eq "\n"} { + set input [string range $input 0 end-1] + set strippedNewline 1 + #puts "stripped the newline!" + } + + set accumulatedInput [concat $accumulatedInput [split $input "\n"]] + #puts "accumulatedInput: \"$accumulatedInput\"" + + # we need to iterate over all lines that are present at the start + # so we will iterate over a copy of accumulatedInput because + # the accumulatedInput list gets manipulated as we go along + set linesToProcess $accumulatedInput + set nLines [llength $linesToProcess] + if {$nLines == 0} {incr nLines} + set firstLine [lindex $linesToProcess 0] + + # adjust the number of lines to process in case we believe the last line is incomplete + set nLinesToProcess [$self computeNLinesToProcess $nLines $strippedNewline $firstLine] + #puts "nLines: $nLines, nLinesToProcess: $nLinesToProcess" + + # process the lines of data + for {set index 0} {$index<$nLinesToProcess} {incr index} { + + set line [lindex $linesToProcess $index] + + + # correct for the removal of newlines during the split command + if {($index == [expr $nLines-1]) && !$incomplete} { + # if we are processing all of the original lines, then that implies the + # message we are working with is considered a complete message + append accumulatedOutMsg "$line" + } else { + # because we are here, we are in the middle of a message, and it is possible + # that we had newlines in the middle of the message. Make sure to add back the newline character + #that + append accumulatedOutMsg "$line\n" + } + + # pop off the current line from accumulatedInput + set accumulatedInput [lreplace $accumulatedInput 0 0] + + #puts "line: \"$line\", accumulatedOutMsg: \"$accumulatedOutMsg\", input: \"$accumulatedInput\", incomplete=$incomplete" + + # if the first word is a legal directive then we will handle the + # message as a packet, otherwise it is some other entity + set firstWord [$self extractFirstWord $accumulatedOutMsg] + if {[$self isLegalDirective $firstWord]} { + #puts "Found a directive" + set parsedLine [$self buildPacket $accumulatedOutMsg] + if {$parsedLine ne ""} { + set incomplete 0 + lappend result $parsedLine + set accumulatedOutMsg {} + } ;# else move to next line and handle it + } else { + #puts "Found a non packet" + set parsedLine [$self handleNonPacket $accumulatedOutMsg] + if {$parsedLine ne {}} { + lappend result $parsedLine + if {[lindex $parsedLine 2] == [string length $accumulatedOutMsg]} { + set accumulatedOutMsg {} + } else { + set accumulatedOutMsg [string range $accumulatedOutMsg [lindex $parsedLine 2] end] + } + } + } + } ;# end of for loop + + + # handle the messages! + set incomplete [expr !$strippedNewline] + #puts "result: \"$result\"" + set retval {} + foreach msg $result { + lappend retval [$self handleMessage $msg] + } + return $retval + } + + method extractFirstWord {sentence} { + return [string range $sentence 0 5] + } + + ## Parse msg that we have identified to begin with a directive + # + # The first word was detected as a legal directive so + # we expect that there is a well formed packet. Try to + # read the whole thing. If the full packet isn't there, + # return a null string and move on. + # If the packet is found, truncate "line" so that the + # packet is no longer being outputted. + # + # \param content the accumulated text to process starting with directive + method buildPacket {content} { + + set incomplete 1 + + # find first and second word boundaries + set b1 [string first { } $content 0] + if {$b1 == -1} return + set b2 [string first { } $content [expr $b1+1]] + if {$b2 == -1} return + + set pktSize [string trim [string range $content $b1 $b2] { \n}] + set totalLength [string length $content] + set remChars [expr $totalLength - ($b2+1)] + + if {$remChars >= $pktSize} { + set b3 [expr $b2+$pktSize] + lappend parsedLine [$self extractFirstWord $content] + lappend parsedLine [string range $content [expr $b2+1] $b3] + lappend parsedLine [string range $content [expr $b1+1] [expr $b2-1]] + + set incomplete 0 + set content [string range $content [expr $b3+1] end] + + return $parsedLine + } else { + return "" + } + + } + + ## Parse msg that we have identified NOT to begin with a directive + # + # Deal with non packet output... we simply output + # everything we have up until a valid directive is + # found. If we find a directive, output everything up to that + # directive, pop the outputted msg from the front of line, + # return. This is an attempt to handle malformed output that + # did not have a newline character. + # + # \param content the accumulated text to process + method handleNonPacket {content} { + + # handle the scenario when the line contains a directive somewhere + # in it + foreach dir $legalDirectives { + set index [string first $dir $content] + if {$index != -1} { + # we found a directive, output everything up to that directive + set msg [string range $content 0 [expr $index-1]] + set content [string range $content $index end] + + return [list OUTPUT $content [string length $content]] + } + } + + # if we are here then we didn't find any directives, output the whole line + set result [list OUTPUT $content [string length $content]] + return $result + } + + # Determine if there word is a legal directive + method isLegalDirective {word} { + return [expr {$word in $legalDirectives}] + } + + # Jump-table of sorts for passing various + # handlers to their handlers + method handleMessage {parsedLine} { + + set directive [lindex $parsedLine 0] + set msg [lindex $parsedLine 1] + set dirId [dict get $directiveMap $directive] + set result {} + switch $dirId { + 0 { set result [$self handleError $msg ] } + 1 { set result [$self handleLog $msg ]} + 2 { set result [$self handleWarning $msg ] } + 3 { set result [$self handleTclCommand $msg ]} + 4 { set result [$self handleOutput $msg] } + 5 { set result [$self handleDebug $msg] } + } + + return $result + } + + method handleError {str} { + return [$options(-actionbundle) handleError $str] + } + + method handleLog {str} { + return [$options(-actionbundle) handleLog $str] + } + + method handleWarning {str} { + return [$options(-actionbundle) handleWarning $str] + } + + method handleDebug {str} { + return [$options(-actionbundle) handleDebug $str] + } + + method handleOutput {str} { + return [$options(-actionbundle) handleOutput $str] + } + + method handleTclCommand {str} { + return [$options(-actionbundle) handleTclCommand $str] + } +} + Deleted: branches/nscdaq-11.0-maintenance/daq/actions/actions.test =================================================================== --- trunk/main/daq/actions/actions.test 2015-11-13 10:42:07 UTC (rev 5142) +++ branches/nscdaq-11.0-maintenance/daq/actions/actions.test 2015-11-13 14:41:55 UTC (rev 5144) @@ -1,242 +0,0 @@ - -package require Actions 1.0 -package require tcltest - -set ::fullPath [tcltest::makeDirectory test] - -tcltest::test buildPktERR {Test that ERRMSG directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "ERRMSG 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {ERRMSG abcdefghij 10} - -tcltest::test buildPktLOG {Test that LOGMSG directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "LOGMSG 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {LOGMSG abcdefghij 10} - -tcltest::test buildPktWRN {Test that WRNMSG directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "WRNMSG 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {WRNMSG abcdefghij 10} - -tcltest::test buildPktTCLCMD {Test that TCLCMD directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "TCLCMD 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {TCLCMD abcdefghij 10} - -tcltest::test buildPktOUTPUT {Test that OUTPUT directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "OUTPUT 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {OUTPUT abcdefghij 10} - -tcltest::test buildPktDBGMSG {Test that DBGMSG directives succeed -} -setup { - set action [::Actions %AUTO%] - $action setLine "DBGMSG 10 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {DBGMSG abcdefghij 10} - - -tcltest::test buildPktIncomplete {Test that packet building stops on incomplete pkt -} -setup { - set action [::Actions %AUTO%] - $action setLine "DBGMSG 16 abcdefghij" -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {} - - -tcltest::test buildPktWithNewline {Test that packet is handled with internal newlines -} -setup { - set action [::Actions %AUTO%] - $action setLine {OUTPUT 4 a - -b} -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {OUTPUT {a - -b} 4} - -tcltest::test buildPktWithMultiDirs {Test that only first packet outputted if multiple are present -} -setup { - set action [::Actions %AUTO%] - $action setLine {OUTPUT 4 abcd OUTPUT 4 efgh OUTPUT 4 ijkl} -} -cleanup { - $action destroy -} -body { - $action buildPacket -} -result {OUTPUT abcd 4} - -namespace eval testHandlers { - variable line {} - proc handleLog msg { variable line; set line "log $msg"} - proc handleError msg { variable line; set line "error $msg"} - proc handleWarning msg { variable line; set line "warning $msg"} - proc handleTclCommand msg { variable line; set line "tcl $msg"} - proc handleOutput msg { variable line; set line "output $msg"} - proc handleDebug msg { variable line; set line "debug $msg"} - - namespace export handleLog handleError handleWarning \ - handleTclCommand handleOutput handleDebug - namespace ensemble create -} - -tcltest::test buildPktSmushed-0 {Test that dropped whitespace get handled -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - - set read0Path [tcltest::makeFile "LOGMSG \n" test0.txt $fullPath] - set read1Path [tcltest::makeFile "4 \n" test1.txt $fullPath] - set read2Path [tcltest::makeFile "asdf\n" test2.txt $fullPath] - set read0 [open $read0Path r] - set read1 [open $read1Path r] - set read2 [open $read2Path r] - set ::testHandlers::line {} -} -cleanup { - $action destroy - close $read0 - close $read1 - close $read2 -} -body { - $action handleReadable $read0 - $action handleReadable $read1 - $action handleReadable $read2 - set ::testHandlers::line -} -result "log asdf" ;# we will have to live with the fact that there is a blank line -# emitted that gets registered as an output line. This should at least not break. - - -tcltest::test handleNonPktNoDirective {Test that fully non-directive data is properly handled -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - $action setLine "abcdefghij" - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - $action handleNonPacket - set ::testHandlers::line -} -result {output abcdefghij} - -tcltest::test handleNonPktWithDirective {Test that directive data is properly handled -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - $action setLine "abcdefERRMSG 4 ghij" - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - $action handleNonPacket - set ::testHandlers::line -} -result {output abcdef} - - -tcltest::test handleMessageLOG {test handleDirective for LOGMSG -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list LOGMSG {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {log my message} - -tcltest::test handleMessageERROR {test handleDirective for ERRMSG -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list ERRMSG {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {error my message} - -tcltest::test handleMessageWRN {test handleDirective for WRNMSG -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list WRNMSG {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {warning my message} - -tcltest::test handleMessageTCLCMD {test handleDirective for TCLCMD -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list TCLCMD {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {tcl my message} - - -tcltest::test handleMessageOUTPUT {test handleDirective for OUTPUT -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list OUTPUT {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {output my message} - -tcltest::test handleMessageDBG {test handleDirective for DBGMSG -} -setup { - set action [::Actions %AUTO% -actionbundle testHandlers] - set ::testHandlers::line {} -} -cleanup { - $action destroy -} -body { - set parsedmsg [list DBGMSG {my message}] - $action handleMessage $parsedmsg - set ::testHandlers::line -} -result {debug my message} - - - -tcltest::cleanupTests Copied: branches/nscdaq-11.0-maintenance/daq/actions/actions.test (from rev 5143, trunk/main/daq/actions/actions.test) =================================================================== --- branches/nscdaq-11.0-maintenance/daq/actions/actions.test (rev 0) +++ branches/nscdaq-11.0-maintenance/daq/actions/actions.test 2015-11-13 14:41:55 UTC (rev 5144) @@ -0,0 +1,284 @@ + +package require Actions 1.0 +package require tcltest + +set ::fullPath [tcltest::makeDirectory test] + +tcltest::test buildPktERR {Test that ERRMSG directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "ERRMSG 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {ERRMSG abcdefghij 10} + +tcltest::test buildPktLOG {Test that LOGMSG directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "LOGMSG 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {LOGMSG abcdefghij 10} + +tcltest::test buildPktWRN {Test that WRNMSG directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "WRNMSG 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {WRNMSG abcdefghij 10} + +tcltest::test buildPktTCLCMD {Test that TCLCMD directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "TCLCMD 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {TCLCMD abcdefghij 10} + +tcltest::test buildPktOUTPUT {Test that OUTPUT directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "OUTPUT 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {OUTPUT abcdefghij 10} + +tcltest::test buildPktDBGMSG {Test that DBGMSG directives succeed +} -setup { + set action [::Actions %AUTO%] + set line "DBGMSG 10 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {DBGMSG abcdefghij 10} + + +tcltest::test buildPktIncomplete {Test that packet building stops on incomplete pkt +} -setup { + set action [::Actions %AUTO%] + set line "DBGMSG 16 abcdefghij" +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {} + + +tcltest::test buildPktWithNewline {Test that packet is handled with internal newlines +} -setup { + set action [::Actions %AUTO%] + set line {OUTPUT 4 a + +b} +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {OUTPUT {a + +b} 4} + +tcltest::test buildPktWithMultiDirs {Test that only first packet outputted if multiple are present +} -setup { + set action [::Actions %AUTO%] + set line {OUTPUT 4 abcd +OUTPUT 4 efgh +OUTPUT 4 ijkl} +} -cleanup { + $action destroy +} -body { + $action buildPacket $line +} -result {OUTPUT abcd 4} + +namespace eval testHandlers { + variable line {} + proc handleLog msg { variable line; append line "log \"$msg\""} + proc handleError msg { variable line; append line "error \"$msg\""} + proc handleWarning msg { variable line; append line "warning \"$msg\""} + proc handleTclCommand msg { variable line; append line "tcl \"$msg\""} + proc handleOutput msg { variable line; append line "output \"$msg\""} + proc handleDebug msg { variable line; append line "debug \"$msg\""} + + namespace export handleLog handleError handleWarning \ + handleTclCommand handleOutput handleDebug + namespace ensemble create +} + +tcltest::test buildPktWithNewlines {Test that packet ending with newline works +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + $action setLine "" +} -cleanup { + $action destroy +} -body { + puts "test" + $action processInput " \nTCL" + $action processInput "CMD 3 end\n" + + set ::testHandlers::line +} -result {output " +"tcl "end"} + +tcltest::test buildPktSmushed-0 {Test that dropped whitespace get handled +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + puts "\n******** test2" + $action processInput "LOGMSG " + $action processInput "4 " + $action processInput "asdf\n" + + set ::testHandlers::line +} -result "log \"asdf\"" ;# we will have to live with the fact that there is a blank line +# emitted that gets registered as an output line. This should at least not break. + + +tcltest::test handleNonPktNoDirective {Test that fully non-directive data is properly handled +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set line "abcdefghij\n" + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput $line + set ::testHandlers::line +} -result {output "abcdefghij"} + +tcltest::test handleNonPktWithDirective {Test that directive data is properly handled +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set line "abcdef\nERRMSG 4 ghij\n" + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput $line + set ::testHandlers::line +} -result {output "abcdef +"error "ghij"} + +tcltest::test handlePainfulMessage {Test that directive data is properly handled +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput "\n" + $action processInput "T" + $action processInput "CL" + $action processInput "C" + $action processInput "M" + $action processInput "D" + $action processInput " " + $action processInput "16 " + $action processInput "puts \"mean msg\n" + $action processInput "\"\n" + set ::testHandlers::line +} -result {output ""tcl "puts "mean msg +""} + +tcltest::test handleSingleNewlineMessage {Test that we can produce a simple newline msg +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput "\n" + set ::testHandlers::line +} -result {output ""} + +tcltest::test handleMessageLOG {test handleDirective for LOGMSG +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list LOGMSG {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {log "my message"} + +tcltest::test handleMessageERROR {test handleDirective for ERRMSG +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list ERRMSG {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {error "my message"} + +tcltest::test handleMessageWRN {test handleDirective for WRNMSG +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list WRNMSG {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {warning "my message"} + +tcltest::test handleMessageTCLCMD {test handleDirective for TCLCMD +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list TCLCMD {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {tcl "my message"} + + +tcltest::test handleMessageOUTPUT {test handleDirective for OUTPUT +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list OUTPUT {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {output "my message"} + +tcltest::test handleMessageDBG {test handleDirective for DBGMSG +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + set parsedmsg [list DBGMSG {my message}] + $action handleMessage $parsedmsg + set ::testHandlers::line +} -result {debug "my message"} + + + +tcltest::cleanupTests Deleted: branches/nscdaq-11.0-maintenance/daq/eventbuilder/endrunmon.tcl =================================================================== --- trunk/main/daq/eventbuilder/endrunmon.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ branches/nscdaq-11.0-maintenance/daq/eventbuilder/endrunmon.tcl 2015-11-13 14:41:55 UTC (rev 5144) @@ -1,293 +0,0 @@ -#!/bin/sh -# -*- tcl -*- -# The next line is executed by /bin/sh, but not tcl \ -exec tclsh "$0" ${1+"$@"} - -# This software is Copyright by the Board of Trustees of Michigan -# State University (c) Copyright 2014. -# -# You may use this software under the terms of the GNU public license -# (GPL). The terms of this license are described at: -# -# http://www.gnu.org/licenses/gpl.txt -# -# Authors: -# Ron Fox -# Jeromy Tompkins -# NSCL -# Michigan State University -# East Lansing, MI 48824-1321 - - - -## -# @file endrunmon.tcl -# @brief Monitor rings for end of run. -# @author Ron Fox <fo...@ns...> -# - -## -# This file contains the EndrunMon package. It provides an API/implementation -# that can monitor a ring for a specific number of end runs. When these -# are seen, a condition variable is signalled and the thread doing the monitoring -# exits. -# -# API: -# * startMonitor - begins the end run monitor thread. -# * setEndRunCount - Sets the number of end run items expected. -# * incEndRunCount - Increments the number of end run items expected -# * decEndRunCount - Decrements the number of end run items expected. -# * waitEndRun - Blocks until the end run items required have been seen. -# * abort - Abort the end run thread after next item. -# - -package provide EndrunMon 1.0 -package require Thread -package require evbcallouts -package require RunstateMachine -package require ui - -## -# Create the namespace and any variables needed in the parent thread. -# -namespace eval ::EndrunMon { - variable mutex [thread::mutex create] - variable condVar [thread::cond create] - variable tid "" -} -## -# Create the thread shared variables we need. They are elements of the varname -# EndrunMon -# - -tsv::set EndrunMon endsExpected 0; # Number of end runs expected. -tsv::set EndrunMon abort 0; # Set nonzero to abort thread. - - -## -# setEndRunCount -# Sets the number of end run items expected by the monitor thread. This can be -# dynamically modified by the monitor which will signal when the number it has -# seen is >= the number requested. -# -# @param value - new number of end runs expected. -# -proc EndrunMon::setEndRunCount value { - tsv::set EndrunMon endsExpected $value -} -## -# incEndRunCount -# Increment the number of end runs expected by the monitor thread. -# -proc EndrunMon::incEndRunCount {} { - tsv::incr EndrunMon endsExpected -} -## -# decEndRunCount -# Decrement the number of end runs expected by the monitor thread. -# -proc EndrunMon::decEndRunCount {} { - tsv::incr EndrunMon endsExpected -1 -} - -## -# startMonitor -# Start the monitor thread. -# - It is an error to do this when the thread is already active -# (nonempty tid) -# - The mutex is taken. We don't release it until we -# wait for the condvar in waitEndRun so that the signal can't happen -# before we wait. -# -# @param ringUrl - the URI of the ring to be monitored. -# - -proc EndrunMon::startMonitor ringUrl { - if {$::EndrunMon::tid ne ""} { - error "Monitor thread is already active!" - } - thread::mutex lock $::EndrunMon::mutex - - # - # Create the thread, send it our auto path and - # get it to require the packages it needs: - # - - set EndrunMon::tid [thread::create -joinable] - thread::send $::EndrunMon::tid [list set auto_path $::auto_path] - thread::send $::EndrunMon::tid { - package require Thread - package require TclRingBuffer - } - # Send the proc that is the thread's action: - - thread::send $::EndrunMon::tid { - ## - # monitorRing - # takes begin/end data from a ring. - # when the nesting level goes to zero, signal the cond var. - # - # @param ringurl - Url for the ring to monitor - # @param mutex - mutex handle that guards the condvar. - # @param condvar - condition variable handle to signal. - # - proc ::monitorRing {ringurl mutex condvar} { - ring attach $ringurl - set ercount 0 - while {1} { - set item [ring get $ringurl [list 2]]; #end run only. - if {[dict get $item type] eq "End Run"} { - incr ercount - # - # Signal if we've seen enough end runs. - # - if {$ercount >= [tsv::get EndrunMon endsExpected]} { - thread::mutex lock $mutex - thread::cond notify $condvar - thread::mutex unlock $mutex - break - } - # - # Handle requests to abort without signalling. - # - if {[tsv::get EndrunMon abort]} { - break - } - } - } - - ring detach $ringurl - tsv::set EndrunMon abort 0; # in case we were aborted. - thread::release - } - } - thread::send -async $::EndrunMon::tid [list monitorRing $ringUrl $EndrunMon::mutex $::EndrunMon::condVar] - -} -## -# waitEndRun -# Wait for the end run to occur. -# This means -# - waiting for the monitor thread to signal the condition variable. -# - joining the thread (as it will exit soon after). -# -proc ::EndrunMon::waitEndRun {} { - if {$::EndrunMon::tid eq ""} { - error "Monitor thread was not started use EndrunMon::startMonitor to do so." - } - # Wait on the condition variable - # and on the thread exit. - # - - set ui [::RunControlSingleton::getInstance] - $ui configure -state disabled - - while {[thread::exists $::EndrunMon::tid]} { - thread::cond wait $EndrunMon::condVar $::EndrunMon::mutex 300 - update idletasks; #Keep UI alive. - } - # Thread exited so: - - thread::join $EndrunMon::tid - - # - # indicate the thread is gone and free the mutex. - # - set EndrunMon::tid "" - thread::mutex unlock $EndrunMon::mutex - - $ui configure -state normal -} -## -# abort -# Abort the monitor thread an wait for it to exit. -# we release the mutex first in case the last end run -# is arriving as we abort. -# -proc ::EndrunMon::abort {} { - if {$::EndrunMon::tid == ""} { - error "::EndrunMon::abort - monitor thread is not running." - } - tsv::set EndrunMon abort 1 - thread::mutex unlock $::EndrunMon::mutex - thread::join $::EndrunMon::tid - - # Mark the thread as non existent: - - set ::EndrunMon::tid "" -} -#---------------------------------------------------------------------------- -# EndunMon callout bundle. -# This section of code registers a callout bundle. Since in general it -# runs on package require it's going to be before the event builder's bundle. -# Here's the set of transitions we do: -# -# Leaving Halted -> Active: Start the monitor thread... -# Entering Halted from Active or Puased: Wait for the end run to complete. -# Entering NotReady - If the monitor thread is running, abort it. -# - -## -# attach -# Called when we are registered as a callback bundle -# We're not going to do anything. -# -# @param current - the current state. -# -proc EndrunMon::attach current { - -} - -## -# enter -# Called when a state is being entered. -# If Halted is being entered from Active or Paused, -# wait for the run to end if the monitor thread -# is active (if we attached in an active state, it won't be). -# If NotReady is entered from any other state, if the monitor thread -# is running abort it..and pray that we're going to be able to -# see something in the ring before the end of days. -# -# @param from - prior state -# @param to - state we are entering. -# -proc EndrunMon::enter {from to} { - - if {($to eq "Halted") && ($from in [list Active Paused])} { - if {$::EndrunMon::tid ne ""} { - ::EndrunMon::waitEndRun - } - } - if {$to eq "NotReady"} { - if {$::EndrunMon::tid ne ""} { - ::EndrunMon::abort - } - } -} -## -# leave -# A state is being left; -# Leaving Halted for Active starts the monitor thread. -# -# @param from - the state being left. -# @param to - the state being entered. -# -# @note EVBC::destRing contains the ring to monitor. -# TODO: Should really provide a mechanism to make this available that is -# not event builder specific. -# - -proc EndrunMon::leave {from to} { - if {($from eq "Halted") && ($to eq "Active") && ($::EndrunMon::tid eq "")} { - set ring tcp://localhost/$::EVBC::destRing - ::EndrunMon::startMonitor $ring - } -} - -namespace eval EndrunMon { - namespace export enter leave attach -} - - -set sm [RunstateMachineSingleton %AUTO%] -$sm addCalloutBundle EndrunMon \ No newline at end of file Copied: branches/nscdaq-11.0-maintenance/daq/eventbuilder/endrunmon.tcl (from rev 5143, trunk/main/daq/eventbuilder/endrunmon.tcl) =================================================================== --- branches/nscdaq-11.0-maintenance/daq/eventbuilder/endrunmon.tcl (rev 0) +++ branches/nscdaq-11.0-maintenance/daq/eventbuilder/endrunmon.tcl 2015-11-13 14:41:55 UTC (rev 5144) @@ -0,0 +1,305 @@ +#!/bin/sh +# -*- tcl -*- +# The next line is executed by /bin/sh, but not tcl \ +exec tclsh "$0" ${1+"$@"} + +# This software is Copyright by the Board of Trustees of Michigan +# State University (c) Copyright 2014. +# +# You may use this software under the terms of the GNU public license +# (GPL). The terms of this license are described at: +# +# http://www.gnu.org/licenses/gpl.txt +# +# Authors: +# Ron Fox +# Jeromy Tompkins +# NSCL +# Michigan State University +# East Lansing, MI 48824-1321 + + + +## +# @file endrunmon.tcl +# @brief Monitor rings for end of run. +# @author Ron Fox <fo...@ns...> +# + +## +# This file contains the EndrunMon package. It provides an API/implementation +# that can monitor a ring for a specific number of end runs. When these +# are seen, a condition variable is signalled and the thread doing the monitoring +# exits. +# +# API: +# * startMonitor - begins the end run monitor thread. +# * setEndRunCount - Sets the number of end run items expected. +# * incEndRunCount - Increments the number of end run items expected +# * decEndRunCount - Decrements the number of end run items expected. +# * waitEndRun - Blocks until the end run items required have been seen. +# * abort - Abort the end run thread after next item. +# + +package provide EndrunMon 1.0 +package require Thread +package require evbcallouts +package require RunstateMachine +package require ui + +## +# Create the namespace and any variables needed in the parent thread. +# +namespace eval ::EndrunMon { + variable mutex [thread::mutex create] + variable condVar [thread::cond create] + variable tid "" +} +## +# Create the thread shared variables we need. They are elements of the varname +# EndrunMon +# + +tsv::set EndrunMon endsExpected 0; # Number of end runs expected. +tsv::set EndrunMon abort 0; # Set nonzero to abort thread. + + +## +# setEndRunCount +# Sets the number of end run items expected by the monitor thread. This can be +# dynamically modified by the monitor which will signal when the number it has +# seen is >= the number requested. +# +# @param value - new number of end runs expected. +# +proc EndrunMon::setEndRunCount value { + tsv::set EndrunMon endsExpected $value +} +## +# incEndRunCount +# Increment the number of end run... [truncated message content] |
From: <ro...@us...> - 2015-11-13 12:35:20
|
Revision: 5143 http://sourceforge.net/p/nscldaq/code/5143 Author: ron-fox Date: 2015-11-13 12:35:18 +0000 (Fri, 13 Nov 2015) Log Message: ----------- * Merge feature-Post_GRETINA-Testrun into trunk. * Merge multilogger.tcl from 11.0-varmgr branch (it had permissions twiddling). * Resolve conflicts to get a good build/test Modified Paths: -------------- trunk/main/ChangeLog trunk/main/base/tclutils/Makefile.am trunk/main/configure.ac trunk/main/daq/actions/actions.tcl trunk/main/daq/actions/actions.test trunk/main/daq/eventbuilder/endrunmon.tcl trunk/main/daq/eventbuilder/evbRdoCallouts.tcl trunk/main/daq/eventbuilder/offlineorderer/JobBuilderUI.tcl trunk/main/daq/eventbuilder/offlineorderer/JobConfigUI.tcl trunk/main/daq/eventbuilder/offlineorderer/JobProcessor.tcl trunk/main/daq/eventbuilder/offlineorderer/Makefile.am trunk/main/daq/eventbuilder/offlineorderer/MissingSourceUI.tcl trunk/main/daq/eventbuilder/offlineorderer/OfflineOrdererUI.tcl trunk/main/daq/eventbuilder/offlineorderer/RunProcessor.tcl trunk/main/daq/eventbuilder/offlineorderer/RunStatusUI.tcl trunk/main/daq/eventbuilder/offlineorderer/jobprocessor.test trunk/main/daq/eventbuilder/offlineorderer/offlineorderer.tcl trunk/main/daq/eventbuilder/offlineorderer/runprocessor.test trunk/main/daq/eventbuilder/offlineorderer/runstatusui.test trunk/main/daq/eventbuilder/ringSourceMgr.tcl trunk/main/daq/readoutgui/DataSourceMonitor.tcl trunk/main/daq/readoutgui/ReadoutGuiClient.tcl trunk/main/daq/readoutgui/RunstateMachine.tcl trunk/main/daq/readoutgui/eventLogBundle.tcl trunk/main/daq/readoutgui/multilogger.tcl trunk/main/daq/readoutgui/readoutGuiProvider.tcl trunk/main/daq/readoutgui/remoteControl.tcl trunk/main/daq/readoutgui/remotecontrol.test trunk/main/daq/readoutgui/s800.test trunk/main/daq/readoutgui/s800Provider.tcl trunk/main/daq/readoutgui/s800fake.tcl trunk/main/daq/readoutgui/ui.tcl trunk/main/daq/s800callouts/s800rctl.tcl trunk/main/sbs/readout/CExperiment.cpp trunk/main/usb/ccusb/devices/CCamacCompat.hpp trunk/main/usb/vmusb/controlpanels/Makefile.am trunk/main/usb/vmusb/controlpanels/client.tcl trunk/main/usb/vmusb/tcldrivers/AGD16XLM72.tcl trunk/main/utilities/Makefile.am Added Paths: ----------- trunk/main/base/tclutils/Process.tcl trunk/main/daq/eventbuilder/offlineorderer/EVBConfigure.tcl trunk/main/usb/vmusb/controlpanels/AGD16XLM72Panel.tcl trunk/main/usb/vmusb/controlpanels/XLM72GateDelayControl.tcl trunk/main/usb/vmusb/controlpanels/gd16_startup.png trunk/main/usb/vmusb/controlpanels/runStateObserver.tcl trunk/main/usb/vmusb/controlpanels/xlm72gatedelaycontrol.xml trunk/main/utilities/fileanalyzer/ Removed Paths: ------------- trunk/main/usb/ccusb/daqconfig/CCamacCompat.hpp Property Changed: ---------------- trunk/main/ trunk/main/base/thread/ trunk/main/daq/readoutgui/multilogger.tcl trunk/main/sbs/vmemodules/CModule32.h trunk/main/sbs/vmemodules/CSIS3820.h trunk/main/usb/ccusb/devices/CConfigurableObject.cpp trunk/main/usb/ccusb/router/COutputThread.cpp trunk/main/usb/common/configurableobject/CConfigurableObject.cpp trunk/main/usb/vmusb/daqconfig/CConfiguration.cpp trunk/main/usb/vmusb/daqconfig/Makefile.am Index: trunk/main =================================================================== --- trunk/main 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main 2015-11-13 12:35:18 UTC (rev 5143) Property changes on: trunk/main ___________________________________________________________________ Modified: svn:mergeinfo ## -1,6 +1,7 ## /branches/11.0-s800conv-development:3453-4324 /branches/11.0-s800conv-fixes:4745-4796 /branches/feature-EVBMonitorThread:5008-5019 +/branches/feature-Post-GRETINA-Testrun:5034-5142 /branches/features-nscldaq-11.0-014:5026-5066 /branches/hira-sisstuff:2744-2997 /branches/nextgen-ccusb-feature:2631-2641 \ No newline at end of property Modified: trunk/main/ChangeLog =================================================================== --- trunk/main/ChangeLog 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/ChangeLog 2015-11-13 12:35:18 UTC (rev 5143) @@ -1000,6 +1000,7 @@ instead. * Fix Bug #4933 - after recording run control buttons are not re-enabled +11.0-019 * Supply Feature #4672 - remove ringfragmentsource as bottleneck in event building systems. * Fix Bug #4945 - Sources permuted between ReadoutGUI sessions. The @@ -1009,4 +1010,14 @@ * Fixes bug #4906 - MCFD16Control fails to properly display state of channel mask in the GUI. * Fixes bug #4948 - CCUSBReadout fails to output END_RUN. - + * Bug #4675 - User interface changes for multilogger so that + record always can be user selected. + * Multilogger - If recording always increment run number when run + ends and not globally recording. + * Fix errror in remote gui back connection - would fail if the + service desired was not the last on in the port manager list. + * Feature #4699 - When a ReadoutShell is enslaved save the run + number and title. When it regains mastery, restore those two bits + of data. + * Feature 4684 - Do piles more failure handling at end run. + Modified: trunk/main/base/tclutils/Makefile.am =================================================================== --- trunk/main/base/tclutils/Makefile.am 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/base/tclutils/Makefile.am 2015-11-13 12:35:18 UTC (rev 5143) @@ -1,7 +1,7 @@ DRIVERDest=@prefix@/TclLibs/tclutils -TCLDRIVERS= Utils.tcl BlockCompleter.tcl TclSourceFilter.tcl +TCLDRIVERS= Utils.tcl BlockCompleter.tcl TclSourceFilter.tcl Process.tcl TCLTESTS= utils.test blockcompleter.test tclsourcefilter.test install-exec-local: Copied: trunk/main/base/tclutils/Process.tcl (from rev 5142, branches/feature-Post-GRETINA-Testrun/base/tclutils/Process.tcl) =================================================================== --- trunk/main/base/tclutils/Process.tcl (rev 0) +++ trunk/main/base/tclutils/Process.tcl 2015-11-13 12:35:18 UTC (rev 5143) @@ -0,0 +1,80 @@ +# +# You may use this software under the terms of the GNU public license +# (GPL). The terms of this license are described at: +# +# http://www.gnu.org/licenses/gpl.txt +# +# Authors: +# NSCLDAQ Development Group +# +# NSCL +# Michigan State University +# East Lansing, MI 48824-1321 + +# This software is Copyright by the Board of Trustees of Michigan +# State University (c) Copyright 2015. + +# @file Process.tcl +# @author Jeromy Tompkins +# +# ############################################################ + + +package provide Process 1.0 + +package require snit + +## @brief Encapsulation of a pipeline process +# +# This provides the user with a simple way to handle +# pipelines. The -oneof option is a callback that allows +# user-defined code to execute when the channel is closed. +# +# It is not possible to open more than one channel per +# instance of this snit::type. +# +snit::type Process { + option -command {} + option -oneof {} + + variable fd {} + + ## @brief Open the pipeline and register the readable callback + constructor {args} { + $self configurelist $args + + set fd [open "| $options(-command) |& cat" r] + chan configure $fd -blocking 0 + chan configure $fd -buffering line + chan event $fd readable [mymethod onReadable $fd] + } + + ## Close the open channel if it is still open + destructor { + if {$fd ne {}} { + catch {close $fd} + } + } + + ## @brief Callback for readable events on the open pipe + # + # If the channel is not at an EOF condition, this simply + # prints the output to stdout. Otherwise, the script specified + # by the -oneof (i.e. on end-of-file) option is executed in + # the global scope. + method onReadable channel { + chan gets $channel line + if {[eof $channel]} { + catch {close $channel} + set fd {} + uplevel #0 $options(-oneof) + } else { + puts $line + } + } + + ## @brief Retrieve the pids of the processes in the pipeline + method getPIDs {} { + return [pid $fd] + } +} Index: trunk/main/base/thread =================================================================== --- trunk/main/base/thread 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/base/thread 2015-11-13 12:35:18 UTC (rev 5143) Property changes on: trunk/main/base/thread ___________________________________________________________________ Modified: svn:mergeinfo ## -1,6 +1,7 ## /branches/11.0-s800conv-development/base/thread:3453-4324 /branches/11.0-s800conv-fixes/base/thread:4745-4796 /branches/feature-EVBMonitorThread/base/thread:5008-5019 +/branches/feature-Post-GRETINA-Testrun/base/thread:5034-5142 /branches/features-nscldaq-11.0-014/base/thread:5026-5066 /branches/hira-sisstuff/base/thread:2744-2997 /branches/nextgen-ccusb-feature/base/thread:2631-2641 \ No newline at end of property Modified: trunk/main/configure.ac =================================================================== --- trunk/main/configure.ac 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/configure.ac 2015-11-13 12:35:18 UTC (rev 5143) @@ -418,6 +418,7 @@ utilities/compatibility/bufdump utilities/newscaler/Makefile utilities/newscaler/ScalerDisplay.tcl + utilities/fileanalyzer/Makefile epics/chanlog/Makefile epics/controlpush/Makefile epics/epicsdisplay/Makefile Modified: trunk/main/daq/actions/actions.tcl =================================================================== --- trunk/main/daq/actions/actions.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/daq/actions/actions.tcl 2015-11-13 12:35:18 UTC (rev 5143) @@ -14,23 +14,45 @@ package require snit +## +# A TCL-side parser for reading messages out of a pipeline enabled +# for reading. This aims to handle messages that are bookended with +# newline characters and will not work properly if messages do not +# follow that rule. Within that framework, this will identify +# packets that are formed by the C++ functions in the Actions namespace. +# These have the form "DIRECTIVE size message", where DIRECTIVE is either +# ERRMSG, LOGMSG, WRNMSG, TCLCMD, OUTPUT, or DBGMSG. Any other message +# that is not in this form will be treated as output. +# +# This snit::type only handles the parsing stage of the message handling. +# What is actually done with the messages after parsing is entirely up +# to the user and definable via a callback bundle (-actionbundle). By +# default, a callback bundle is provided and used that will work with +# the ReadoutGUI logging mechanism for formatting data. snit::type Actions { - variable line "" - variable incomplete 0 - variable errors [dict create 0 " unable to parse directive"] - variable legalDirectives {ERRMSG LOGMSG WRNMSG TCLCMD OUTPUT DBGMSG} + variable accumulatedInput "" ;#< message data received for parsing, split into a list by newlines + variable accumulatedOutMsg "" ;#< message being formed as a packet to output + variable incomplete 0 ;#< flag identifying if processing ended with an incomplete packet + variable errors [dict create 0 " unable to parse directive"] + variable legalDirectives {ERRMSG LOGMSG WRNMSG TCLCMD OUTPUT DBGMSG} variable directiveMap { ERRMSG 0 LOGMSG 1 WRNMSG 2 TCLCMD 3 OUTPUT 4 DBGMSG 5} - option -actionbundle -default DefaultActions + option -actionbundle -default DefaultActions ;#< callback bundle constructor {args} { $self configurelist $args } + ## \brief Method for responding to readable events on pipes + # + # This is really the entry point to this whole business. It + # deals with eof conditions properly. Usually it just delegates + # to the handleReadable method + # + # \param fd the file channel to read from method onReadable {fd} { - set incomplete 0 if { [eof $fd] } { # unregister itself @@ -39,7 +61,6 @@ # we have reached an end of file # # convert to blocking to retrieve the exit status - if {0} { chan configure $fd -blocking 1 if {[catch {close $fd} msg]} { @@ -47,77 +68,192 @@ puts stderr "Child process exited abnormally with status: $::errorCode" } } - } } else { $self handleReadable $fd } } - method getLine {} { return $line } - method setLine {str} { set line $str } + method getLine {} { return $accumulatedInput } + method setLine {str} { set accumulatedInput $str } + ## \brief Reads input from the channel and processes it + # + # \param fd the channel to read from method handleReadable {fd} { - set incomplete 0 - - # read what the channel has to give us + # read what the channel has to give us, this does not terminate in + # a newline if there was none to begin with. set input [chan read $fd ] - append line "$input" - set line [string trimright $line "\0\n"] + return [$self processInput $input] + } + ## Adjust the number of lines we have to process + # + # We need to be careful about not processing the last line of the message + # in case it did not end in a newline character. By not ending in a newline + # character, that means we do not have a complete message and should + # adjust the number of lines to process so that the last line is excluded. + method computeNLinesToProcess {nLines strippedNewline firstLine} { + if {(! $strippedNewline)} { + #puts "did not strip newline" + #puts "nLines=$nLines, firstLine=\"$firstLine\", isLegalDir=[$self isLegalDirective [$self extractFirstWord $firstLine]]" + if {($nLines != 1) + || !([$self isLegalDirective [$self extractFirstWord $firstLine]]) + || ([string length $firstLine]<6)} { + #puts "adjusting number of lines" + incr nLines -1 + } + } + + return $nLines + } + + + ## The logic for parsing the messages + # + # This has become embarrassingly complicated... but it is not reasonable to rewrite. + # Parsing is not a trivial task. + # + # The idea here is that we are maintaining a list of lines that were separated by + # newline characters. Packets may be contained in a single line or may consist of multiple lines. + # The packet message that is being formed is therefore part of the state of the + # snit::type and is appended to until it is determined complete. + # + # Once a packet is completed, it is added to a list of results. You can imagine that the + # possibility exists to have multiple packets to deal with if we are not line buffering. + # In that case, we keep adding complete packets to our list until all viable text has + # been processed and then the packets are processed at the end. + method processInput input { + #puts "processing input: \"$input\"" + + if {$incomplete} { + #puts "last was incomplete and we start with : \"$accumulatedInput\"" + set input "[lindex $accumulatedInput end]$input" + set accumulatedInput {} + } + + set strippedNewline 0 set result {} - while {[string length $line]>0 && !($incomplete)} { - set firstWord [$self extractFirstWord $line] - # if we have a legal directive, treat it - # as a packet + # pop a single newline character off of the end if it exists to avoid + # an empty line at the end caused by the split command + if {[string index $input end] eq "\n"} { + set input [string range $input 0 end-1] + set strippedNewline 1 + #puts "stripped the newline!" + } + + set accumulatedInput [concat $accumulatedInput [split $input "\n"]] + #puts "accumulatedInput: \"$accumulatedInput\"" + + # we need to iterate over all lines that are present at the start + # so we will iterate over a copy of accumulatedInput because + # the accumulatedInput list gets manipulated as we go along + set linesToProcess $accumulatedInput + set nLines [llength $linesToProcess] + if {$nLines == 0} {incr nLines} + set firstLine [lindex $linesToProcess 0] + + # adjust the number of lines to process in case we believe the last line is incomplete + set nLinesToProcess [$self computeNLinesToProcess $nLines $strippedNewline $firstLine] + #puts "nLines: $nLines, nLinesToProcess: $nLinesToProcess" + + # process the lines of data + for {set index 0} {$index<$nLinesToProcess} {incr index} { + + set line [lindex $linesToProcess $index] + + + # correct for the removal of newlines during the split command + if {($index == [expr $nLines-1]) && !$incomplete} { + # if we are processing all of the original lines, then that implies the + # message we are working with is considered a complete message + append accumulatedOutMsg "$line" + } else { + # because we are here, we are in the middle of a message, and it is possible + # that we had newlines in the middle of the message. Make sure to add back the newline character + #that + append accumulatedOutMsg "$line\n" + } + + # pop off the current line from accumulatedInput + set accumulatedInput [lreplace $accumulatedInput 0 0] + + #puts "line: \"$line\", accumulatedOutMsg: \"$accumulatedOutMsg\", input: \"$accumulatedInput\", incomplete=$incomplete" + + # if the first word is a legal directive then we will handle the + # message as a packet, otherwise it is some other entity + set firstWord [$self extractFirstWord $accumulatedOutMsg] if {[$self isLegalDirective $firstWord]} { - set parsedLine [$self buildPacket ] - if {"$parsedLine" ne ""} { + #puts "Found a directive" + set parsedLine [$self buildPacket $accumulatedOutMsg] + if {$parsedLine ne ""} { set incomplete 0 - set result [$self handleMessage $parsedLine] + lappend result $parsedLine + set accumulatedOutMsg {} + } ;# else move to next line and handle it + } else { + #puts "Found a non packet" + set parsedLine [$self handleNonPacket $accumulatedOutMsg] + if {$parsedLine ne {}} { + lappend result $parsedLine + if {[lindex $parsedLine 2] == [string length $accumulatedOutMsg]} { + set accumulatedOutMsg {} + } else { + set accumulatedOutMsg [string range $accumulatedOutMsg [lindex $parsedLine 2] end] + } } - } else { - set result [$self handleNonPacket] - } - }; # end of nonzero input + } + } ;# end of for loop - return $result + + # handle the messages! + set incomplete [expr !$strippedNewline] + #puts "result: \"$result\"" + set retval {} + foreach msg $result { + lappend retval [$self handleMessage $msg] + } + return $retval } - + method extractFirstWord {sentence} { return [string range $sentence 0 5] } + ## Parse msg that we have identified to begin with a directive + # # The first word was detected as a legal directive so # we expect that there is a well formed packet. Try to # read the whole thing. If the full packet isn't there, # return a null string and move on. # If the packet is found, truncate "line" so that the # packet is no longer being outputted. - method buildPacket {} { + # + # \param content the accumulated text to process starting with directive + method buildPacket {content} { set incomplete 1 # find first and second word boundaries - set b1 [string first { } $line 0] + set b1 [string first { } $content 0] if {$b1 == -1} return - set b2 [string first { } $line [expr $b1+1]] + set b2 [string first { } $content [expr $b1+1]] if {$b2 == -1} return - set pktSize [string trim [string range $line $b1 $b2] { \n}] - set totalLength [string length $line] + set pktSize [string trim [string range $content $b1 $b2] { \n}] + set totalLength [string length $content] set remChars [expr $totalLength - ($b2+1)] if {$remChars >= $pktSize} { set b3 [expr $b2+$pktSize] - lappend parsedLine [$self extractFirstWord $line] - lappend parsedLine [string range $line [expr $b2+1] $b3] - lappend parsedLine [string range $line [expr $b1+1] [expr $b2-1]] + lappend parsedLine [$self extractFirstWord $content] + lappend parsedLine [string range $content [expr $b2+1] $b3] + lappend parsedLine [string range $content [expr $b1+1] [expr $b2-1]] set incomplete 0 - set line [string range $line [expr $b3+1] end] + set content [string range $content [expr $b3+1] end] return $parsedLine } else { @@ -126,30 +262,33 @@ } + ## Parse msg that we have identified NOT to begin with a directive + # # Deal with non packet output... we simply output # everything we have up until a valid directive is - # found - # if we find a directive, output everything up to that + # found. If we find a directive, output everything up to that # directive, pop the outputted msg from the front of line, - # return. - - method handleNonPacket {} { + # return. This is an attempt to handle malformed output that + # did not have a newline character. + # + # \param content the accumulated text to process + method handleNonPacket {content} { - # Check if line contains any legal directives + # handle the scenario when the line contains a directive somewhere + # in it foreach dir $legalDirectives { - set index [string first $dir $line] + set index [string first $dir $content] if {$index != -1} { - set msg [string range $line 0 [expr $index-1]] - set line [string range $line $index end] + # we found a directive, output everything up to that directive + set msg [string range $content 0 [expr $index-1]] + set content [string range $content $index end] - return [$self handleOutput $msg] - - } + return [list OUTPUT $content [string length $content]] + } } - # if we are here then we didn't find any directives - set result [$self handleOutput $line] - set line "" + # if we are here then we didn't find any directives, output the whole line + set result [list OUTPUT $content [string length $content]] return $result } Modified: trunk/main/daq/actions/actions.test =================================================================== --- trunk/main/daq/actions/actions.test 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/daq/actions/actions.test 2015-11-13 12:35:18 UTC (rev 5143) @@ -7,85 +7,85 @@ tcltest::test buildPktERR {Test that ERRMSG directives succeed } -setup { set action [::Actions %AUTO%] - $action setLine "ERRMSG 10 abcdefghij" + set line "ERRMSG 10 abcdefghij" } -cleanup { $action destroy } -body { - $action buildPacket + $action buildPacket $line } -result {ERRMSG abcdefghij 10} tcltest::test buildPktLOG {Test that LOGMSG directives succeed } -setup { set action [::Actions %AUTO%] - $action setLine "LOGMSG 10 abcdefghij" + set line "LOGMSG 10 abcdefghij" } -cleanup { $action destroy } -body { - $action buildPacket + $action buildPacket $line } -result {LOGMSG abcdefghij 10} tcltest::test buildPktWRN {Test that WRNMSG directives succeed } -setup { set action [::Actions %AUTO%] - $action setLine "WRNMSG 10 abcdefghij" + set line "WRNMSG 10 abcdefghij" } -cleanup { $action destroy } -body { - $action buildPacket + $action buildPacket $line } -result {WRNMSG abcdefghij 10} tcltest::test buildPktTCLCMD {Test that TCLCMD directives succeed } -setup { set action [::Actions %AUTO%] - $action setLine "TCLCMD 10 abcdefghij" + set line "TCLCMD 10 abcdefghij" } -cleanup { $action destroy } -body { - $action buildPacket + $action buildPacket $line } -result {TCLCMD abcdefghij 10} tcltest::test buildPktOUTPUT {Test that OUTPUT directives succeed } -setup { set action [::Actions %AUTO%] - $action setLine "OUTPUT 10 abcdefghij" + set line "OUTPUT 10 abcdefghij" } -cleanup { $action destroy } -body { - $action buildPacket + $action buildPacket $line } -result {OUTPUT abcdefghij 10} tcltest::test buildPktDBGMSG {Test that DBGMSG directives succeed } -setup { set action [::Actions %AUTO%] - $action setLine "DBGMSG 10 abcdefghij" + set line "DBGMSG 10 abcdefghij" } -cleanup { $action destroy } -body { - $action buildPacket + $action buildPacket $line } -result {DBGMSG abcdefghij 10} tcltest::test buildPktIncomplete {Test that packet building stops on incomplete pkt } -setup { set action [::Actions %AUTO%] - $action setLine "DBGMSG 16 abcdefghij" + set line "DBGMSG 16 abcdefghij" } -cleanup { $action destroy } -body { - $action buildPacket + $action buildPacket $line } -result {} tcltest::test buildPktWithNewline {Test that packet is handled with internal newlines } -setup { set action [::Actions %AUTO%] - $action setLine {OUTPUT 4 a + set line {OUTPUT 4 a b} } -cleanup { $action destroy } -body { - $action buildPacket + $action buildPacket $line } -result {OUTPUT {a b} 4} @@ -93,77 +93,119 @@ tcltest::test buildPktWithMultiDirs {Test that only first packet outputted if multiple are present } -setup { set action [::Actions %AUTO%] - $action setLine {OUTPUT 4 abcd OUTPUT 4 efgh OUTPUT 4 ijkl} + set line {OUTPUT 4 abcd +OUTPUT 4 efgh +OUTPUT 4 ijkl} } -cleanup { $action destroy } -body { - $action buildPacket + $action buildPacket $line } -result {OUTPUT abcd 4} namespace eval testHandlers { variable line {} - proc handleLog msg { variable line; set line "log $msg"} - proc handleError msg { variable line; set line "error $msg"} - proc handleWarning msg { variable line; set line "warning $msg"} - proc handleTclCommand msg { variable line; set line "tcl $msg"} - proc handleOutput msg { variable line; set line "output $msg"} - proc handleDebug msg { variable line; set line "debug $msg"} + proc handleLog msg { variable line; append line "log \"$msg\""} + proc handleError msg { variable line; append line "error \"$msg\""} + proc handleWarning msg { variable line; append line "warning \"$msg\""} + proc handleTclCommand msg { variable line; append line "tcl \"$msg\""} + proc handleOutput msg { variable line; append line "output \"$msg\""} + proc handleDebug msg { variable line; append line "debug \"$msg\""} namespace export handleLog handleError handleWarning \ handleTclCommand handleOutput handleDebug namespace ensemble create } +tcltest::test buildPktWithNewlines {Test that packet ending with newline works +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + $action setLine "" +} -cleanup { + $action destroy +} -body { + puts "test" + $action processInput " \nTCL" + $action processInput "CMD 3 end\n" + + set ::testHandlers::line +} -result {output " +"tcl "end"} + tcltest::test buildPktSmushed-0 {Test that dropped whitespace get handled } -setup { set action [::Actions %AUTO% -actionbundle testHandlers] - set read0Path [tcltest::makeFile "LOGMSG \n" test0.txt $fullPath] - set read1Path [tcltest::makeFile "4 \n" test1.txt $fullPath] - set read2Path [tcltest::makeFile "asdf\n" test2.txt $fullPath] - set read0 [open $read0Path r] - set read1 [open $read1Path r] - set read2 [open $read2Path r] set ::testHandlers::line {} } -cleanup { $action destroy - close $read0 - close $read1 - close $read2 } -body { - $action handleReadable $read0 - $action handleReadable $read1 - $action handleReadable $read2 + puts "\n******** test2" + $action processInput "LOGMSG " + $action processInput "4 " + $action processInput "asdf\n" + set ::testHandlers::line -} -result "log asdf" ;# we will have to live with the fact that there is a blank line +} -result "log \"asdf\"" ;# we will have to live with the fact that there is a blank line # emitted that gets registered as an output line. This should at least not break. tcltest::test handleNonPktNoDirective {Test that fully non-directive data is properly handled } -setup { set action [::Actions %AUTO% -actionbundle testHandlers] - $action setLine "abcdefghij" + set line "abcdefghij\n" set ::testHandlers::line {} } -cleanup { $action destroy } -body { - $action handleNonPacket + $action processInput $line set ::testHandlers::line -} -result {output abcdefghij} +} -result {output "abcdefghij"} tcltest::test handleNonPktWithDirective {Test that directive data is properly handled } -setup { set action [::Actions %AUTO% -actionbundle testHandlers] - $action setLine "abcdefERRMSG 4 ghij" + set line "abcdef\nERRMSG 4 ghij\n" set ::testHandlers::line {} } -cleanup { $action destroy } -body { - $action handleNonPacket + $action processInput $line set ::testHandlers::line -} -result {output abcdef} +} -result {output "abcdef +"error "ghij"} +tcltest::test handlePainfulMessage {Test that directive data is properly handled +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput "\n" + $action processInput "T" + $action processInput "CL" + $action processInput "C" + $action processInput "M" + $action processInput "D" + $action processInput " " + $action processInput "16 " + $action processInput "puts \"mean msg\n" + $action processInput "\"\n" + set ::testHandlers::line +} -result {output ""tcl "puts "mean msg +""} +tcltest::test handleSingleNewlineMessage {Test that we can produce a simple newline msg +} -setup { + set action [::Actions %AUTO% -actionbundle testHandlers] + set ::testHandlers::line {} +} -cleanup { + $action destroy +} -body { + $action processInput "\n" + set ::testHandlers::line +} -result {output ""} + tcltest::test handleMessageLOG {test handleDirective for LOGMSG } -setup { set action [::Actions %AUTO% -actionbundle testHandlers] @@ -174,7 +216,7 @@ set parsedmsg [list LOGMSG {my message}] $action handleMessage $parsedmsg set ::testHandlers::line -} -result {log my message} +} -result {log "my message"} tcltest::test handleMessageERROR {test handleDirective for ERRMSG } -setup { @@ -186,7 +228,7 @@ set parsedmsg [list ERRMSG {my message}] $action handleMessage $parsedmsg set ::testHandlers::line -} -result {error my message} +} -result {error "my message"} tcltest::test handleMessageWRN {test handleDirective for WRNMSG } -setup { @@ -198,7 +240,7 @@ set parsedmsg [list WRNMSG {my message}] $action handleMessage $parsedmsg set ::testHandlers::line -} -result {warning my message} +} -result {warning "my message"} tcltest::test handleMessageTCLCMD {test handleDirective for TCLCMD } -setup { @@ -210,7 +252,7 @@ set parsedmsg [list TCLCMD {my message}] $action handleMessage $parsedmsg set ::testHandlers::line -} -result {tcl my message} +} -result {tcl "my message"} tcltest::test handleMessageOUTPUT {test handleDirective for OUTPUT @@ -223,7 +265,7 @@ set parsedmsg [list OUTPUT {my message}] $action handleMessage $parsedmsg set ::testHandlers::line -} -result {output my message} +} -result {output "my message"} tcltest::test handleMessageDBG {test handleDirective for DBGMSG } -setup { @@ -235,7 +277,7 @@ set parsedmsg [list DBGMSG {my message}] $action handleMessage $parsedmsg set ::testHandlers::line -} -result {debug my message} +} -result {debug "my message"} Modified: trunk/main/daq/eventbuilder/endrunmon.tcl =================================================================== --- trunk/main/daq/eventbuilder/endrunmon.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/daq/eventbuilder/endrunmon.tcl 2015-11-13 12:35:18 UTC (rev 5143) @@ -289,5 +289,17 @@ } -set sm [RunstateMachineSingleton %AUTO%] -$sm addCalloutBundle EndrunMon \ No newline at end of file +## +# register the bundle to the state machine before a specific callout bundle +# +# @param beforeBundle name of callout bundle you want to insert this before +# +proc EndrunMon::register {{beforeBundle {}}} { + set sm [RunstateMachineSingleton %AUTO%] + if {$beforeBundle eq {}} { + $sm addCalloutBundle EndrunMon + } else { + $sm addCalloutBundle EndrunMon $beforeBundle + } + $sm destroy +} Modified: trunk/main/daq/eventbuilder/evbRdoCallouts.tcl =================================================================== --- trunk/main/daq/eventbuilder/evbRdoCallouts.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/daq/eventbuilder/evbRdoCallouts.tcl 2015-11-13 12:35:18 UTC (rev 5143) @@ -1176,6 +1176,7 @@ $stateMachine addCalloutBundle EVBC [lindex $callouts 0] set ::EVBC::registered 1 $stateMachine addCalloutBundle ::RingSourceMgr [lindex $callouts 0] + ::EndrunMon::register [lindex $callouts 0] } } Copied: trunk/main/daq/eventbuilder/offlineorderer/EVBConfigure.tcl (from rev 5142, branches/feature-Post-GRETINA-Testrun/daq/eventbuilder/offlineorderer/EVBConfigure.tcl) =================================================================== --- trunk/main/daq/eventbuilder/offlineorderer/EVBConfigure.tcl (rev 0) +++ trunk/main/daq/eventbuilder/offlineorderer/EVBConfigure.tcl 2015-11-13 12:35:18 UTC (rev 5143) @@ -0,0 +1,57 @@ +# +# You may use this software under the terms of the GNU public license +# (GPL). The terms of this license are described at: +# +# http://www.gnu.org/licenses/gpl.txt +# +# Authors: +# NSCLDAQ Development Group +# +# NSCL +# Michigan State University +# East Lansing, MI 48824-1321 + +# This software is Copyright by the Board of Trustees of Michigan +# State University (c) Copyright 2297884. + +# @file JobProcessor.tcl +# @author Jeromy Tompkins + + +package provide evbconfigure 1.0 + +package require evbcallouts +package require StateManager + + +## This is a simple callout bundle that enable the user to set the +# build window to 600 seconds. WE need this for the offlineorderer +# because we need to have a huge build window for safety. +# +# I do not make this generic because it is really only useful for the +# offline orderer. I cannot see a reason to make this generally usable. +# +namespace eval EVBConfigure { + + proc attach {to} { + } + + proc enter {from to} { + } + + proc leave {from to} { + if {$from eq "Halted" && $to eq "Active"} { + puts $::EVBC::pipefd [list set window 600] + after 1000 + } + } + + proc register {} { + set sm [RunstateMachineSingleton %AUTO%] + $sm addCalloutBundle ::EVBConfigure + $sm destroy + } + + namespace export attach enter leave + +} Modified: trunk/main/daq/eventbuilder/offlineorderer/JobBuilderUI.tcl =================================================================== --- trunk/main/daq/eventbuilder/offlineorderer/JobBuilderUI.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/daq/eventbuilder/offlineorderer/JobBuilderUI.tcl 2015-11-13 12:35:18 UTC (rev 5143) @@ -480,6 +480,7 @@ toplevel .jobconf wm title .jobconf "Configure Job" wm resizable .jobconf false false + set config [JobConfigUIPresenter %AUTO% -widgetname .jobconf.ui \ -ismaster 1] Modified: trunk/main/daq/eventbuilder/offlineorderer/JobConfigUI.tcl =================================================================== --- trunk/main/daq/eventbuilder/offlineorderer/JobConfigUI.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/daq/eventbuilder/offlineorderer/JobConfigUI.tcl 2015-11-13 12:35:18 UTC (rev 5143) @@ -29,7 +29,9 @@ package require OfflineEVBHoistPipeline package require evbcallouts package require OfflineEVBOutputPipeline +package require Process + package require snit package require Tk @@ -75,36 +77,17 @@ # # @ingroup jobconfigui # -# This is the megawidget that the user will ultimately interact with. It is a -# megawidget whose hull is a ttk::frame. Other software should not directly -# instantiate one of these unless it knows what it is doing because these are -# only useful when attached to a JobConfigUIPresenter. -# -# There are a few useful options that can provided to configure the way that -# this appears to the user: -# -# -missingwidget a MissingSourceUIView object -# -buildwidget a BuildEventsWidget object -# -showbuttons boolean value indicating whether to show buttons or not -# (basically this determines whether this is its own master) -# -buttontext the text to put on the "Accept" button -# -# Otherwise, the other options contain the display state of view. These are the -# value of the data that could be written into the model if the presenter -# decides to synchronize to the view state. +# This is essentially a container for the ConfigurationFrame and the AnalysisProgress +# megawidgets. It delegates all options and methods to the view that is currently +# being shown to the user. The presenter can switch between the two modes. snit::widget JobConfigUIView { - - option -nsources -default 2 ;#< number of end runs to expect - option -jobname -default "Job" ;#< name of job (not used) - option -missingwidget -default "" ;#< name of missing source widget - option -buildwidget -default "" ;#< name of buildevents widget + component m_presenter ;#< The presenter - option -showbuttons -default 1 ;#< show buttons or not? - option -buttontext -default "Create" ;#< Label to put on button + component m_currentView ;#< the current view - component m_presenter ;#< The presenter - variable m_fileTree ;#< FileList widget name + delegate option * to m_currentView + delegate method * to m_currentView ## @brief Construct the megawidget # @@ -116,12 +99,15 @@ constructor {presenter args} { set m_presenter $presenter - set m_fileTree "" + AnalysisProgress $win.analysis $m_presenter -onabort [mymethod onAbort] + + install m_currentView using ConfigurationFrame $win.config $m_presenter + $self configurelist $args # build the gui - $self buildGUI + $self gridConfigurationView } ## @brief Destroy this thing @@ -131,91 +117,41 @@ } - ## @brief Assemble the megawidget + ## @brief Switch the configuration mode # - # Because this is a snit::widget object, the hull is actually just a ttk::frame. - # This fills that frame ($win) with a bunch of configuration widgets. These are - # simply some labels on text entries. - # - method buildGUI {} { - variable m_paramFrame - - ttk::label $win.jobNameLbl -text "Job name" - ttk::label $win.jobNameEntry -textvariable [myvar options(-jobname)] - - set top $win.fileFrame - set m_fileTree $top.files - - ttk::frame $top - ttk::label $top.addFilesLbl -text "Add run files" - FileList $m_fileTree -sort 1 - grid $top.addFilesLbl -sticky new - grid $top.files -sticky nsew - grid rowconfigure $top 0 -weight 1 - grid columnconfigure $top 0 -weight 1 - - set m_paramFrame $win.params - set top $m_paramFrame - ttk::frame $top - - ttk::label $top.nsrcsLbl -text "Number of end runs to expect" - ttk::entry $top.nsrcsEntry -textvariable [myvar options(-nsources)] -width 3 - - - set buttons $win.buttons - ttk::frame $buttons - ttk::button $buttons.cancel -text "Cancel" -command [mymethod onCancel] - ttk::button $buttons.create -textvariable [myvar options(-buttontext)]\ - -command [mymethod onCreate] - grid $buttons.cancel $buttons.create -sticky e -padx {9 0} - - grid $top.nsrcsLbl $top.nsrcsEntry -sticky nw - if {$options(-missingwidget) ne ""} { - $self gridMissingMissingWidget $options(-missingwidget) + # Remove all current widgets that are displayed and + # replace them with the configuration view + method gridConfigurationView {} { + if {$m_currentView ne "$win.config"} { + foreach slave [grid slaves $win] { + grid remove $slave + } } - if {$options(-buildwidget) ne ""} { - $self gridBuildWidget $options(-buildwidget) - } - grid configure $top.nsrcsEntry -sticky ne + set m_currentView $win.config - - grid $win.fileFrame -row 0 -column 0 -padx {0 9} -sticky nsew - grid $top -row 0 -column 1 -padx {9 0} -sticky nsew - grid x $buttons -row 1 -padx 9 -sticky sew -pady 9 - grid columnconfigure $win {0 1} -weight 1 -minsize 300 - + grid $m_currentView -sticky nsew + grid rowconfigure $win all -weight 1 + grid columnconfigure $win all -weight 1 } - ## @brief Grid the missing sources widget - # @param name name of the widget - method gridMissingWidget {name} { - variable m_paramFrame - grid $name - -row 1 -sticky new -pady 9 -in $m_paramFrame - } + ## @brief Switch to the analysis mode + # + # Analogous to gridAnalysisView but for the analysis mode. + method gridAnalysisView {} { +# set oldGeo [wm geometry [winfo toplevel $self]] + if {$m_currentView ne "$win.analysis"} { + foreach slave [grid slaves $win] { + grid remove $slave + } + } + set m_currentView $win.analysis - ## @brief Grid the build event widget - # @param name of the widget - method gridBuildWidget {name} { - variable m_paramFrame - grid $name - -row 2 -sticky new -in $m_paramFrame - } + grid $m_currentView -sticky nsew + grid rowconfigure $win all -weight 1 + grid columnconfigure $win all -weight 1 - ## @brief Forward button press event to presenter - # - # This does not check whether the presenter exists. It is assumed that the - # user has already set this up. - method onCancel {} { - $m_presenter cancel } - ## @brief Forward button press event to presenter - # - # This does not check whether the presenter exists. It is assumed that the - # user has already set this up. - method onCreate {} { - $m_presenter create - } - ## @brief Pass this a different presenter object # # @param presenter an InputPipeConfigUIPresenter object @@ -238,10 +174,15 @@ # # @returns name of the object in control of the filelist widget method getFileListPresenter {} { - return $m_fileTree + return [$win.config getFileListPresenter] } + + + method onAbort {} { + $m_presenter onAnalysisAbort + } + } - # End of JobConfigUIView code # ------------------------------------------------------------------------------ @@ -279,6 +220,7 @@ variable m_filelist ;#< the view's file list widget variable m_observer ;#< observes whether this is to be accepted + variable m_analysisDone ; ## Construct the model, view, and synchronize view # @@ -604,6 +546,164 @@ $m_view configure -buttontext $text } + ## @brief Analyze the files in the file list + # + # @todo Break this off into its own snit::type + # + # In this method, the presenter retrieves the files to the be processed, + # then sends them through the FileAnalyzer program. This program counts the + # number of item of each type for each source id in the file and then writes a + # tcl dictionary summarizing the results to a file. This proc then sources the + # file to bring the results into the tcl world and then uses the dictionary of + # statistics to fill in some details for the user. It catches problems with + # insufficient state change items, and missing body headers. While the analysis + # is in progress, it switches the view to the analysis view so that the user sees + # a progress bar and an abort button. + # + method onAnalyze {} { + + set files [[$m_view getFileListPresenter] getFiles] + if {[llength $files] == 0} { + tk_messageBox -icon error -message "You must specify some files before you can analyze" + return "" + } + + # swap the state of the view so that users see a progress bar + $m_view gridAnalysisView + + # launch the analyzer + set analyzer [file join [InstallRoot::Where] bin FileAnalyzer] + # figure out a unique file path to use for writing the result to + set resultFile [$self generateResultFilePath] + Process analyzer -command [list cat $files | $analyzer --source=- \ + --sink=file:///dev/null --oneshot --number-of-sources=100000 \ + --output-file=$resultFile] \ + -oneof [list set [myvar m_analysisDone] 1] + set analysisPid [analyzer getPIDs] + + # once the file closes we will be done waiting, alternatively we can stop waiting + # if the user presses the abort button + vwait [myvar m_analysisDone] + analyzer destroy + + # switch back to the configuration view + $m_view gridConfigurationView + + + # the result file did not get created... shoot. This can happen if the user + # aborts + if {![file exists $resultFile]} { + tk_messageBox -icon error -message "Analysis of file(s) did not complete normally" + return + } + + # bring the results into the tcl world as a dict + source $resultFile + + # clean up. + file delete $resultFile + + # Do some basic analysis + + # count the number of sources + set beginCount 0 + set endCount 0 + dict for {id itemCounts} $sourceMap { + incr beginCount [dict get $itemCounts BEGIN_RUN] + incr endCount [dict get $itemCounts END_RUN] + } + + if {$beginCount != $endCount} { + set msg "Analysis found $beginCount begin items and $endCount end items. " + append msg "Because these are different numbers, the file cannot be safely processed." + tk_messageBox -icon error -message $msg -parent $m_view + return "" + } + $m_view configure -nsources $endCount + + if {[dict exists $sourceMap 4294967295]} { + set missingWidget [$m_view cget -missingwidget] + $missingWidget configure -missing 1 + set suggestedId [$self generateSuggestedID $sourceMap] + $missingWidget setSourceID $suggestedId + } + + } + + ## @brief Break the vwait + method onAnalysisAbort {} { + set m_analysisDone 1 + } + + ## @brief Figure out a unique path to use as the result file + # + # This is not 100% fool proof. The goal is to not clobber a file + # that already exists with the output of the analyzer. However, + # someone could be nasty and create of file of the same name as the + # resulting path found by this program while the analyzer is running. + # If they do that, their file will be overwritten by the analyzer. + # + # But the odds that someone is going to come up with a file names + # .[pid]_fileanalysis is pretty low. + # + # @return path name that currently does not exist + # + method generateResultFilePath {} { + set path [file join [pwd] .[pid]_fileanalysis] + set i 0 + while {[file exists $path]} { + set path [file join [pwd] .[expr [pid]+$i]_fileanalysis] + } + return $path + } + + ## @brief Figure out a good source id to use for missing body header + # + # If this is called, it has been determined that some ring items were + # missing body headers. We can assume this and try to help the user + # choose an appropriate source id to use for those items. + # We really want to prevent the user from choosing a duplicate + # source id to the other ring items that had body headers. That way + # they don't run into the nasty situation wehre they are sticking multiple + # BEGIN_RUN and END_RUN items into the same event order queues. While + # we do this, we try to give them the source id that corresponds to the other + # "body-header"less ring items. We detect this by finding out that a source id + # exists for which there are no BEGIN_RUN items. In the end it is up to the user + # to decided to use our suggested number. + # + # @return a safe source id + # + method generateSuggestedID {statistics} { + set ids [dict keys $statistics] + foreach id $ids { + if {([dict get $statistics $id BEGIN_RUN] == 0) && ([dict get $statistics $id PHYSICS_EVENT]>0)} { + + set msg "Analysis of the file revealed that source id $id " + append msg "lacks BEGIN_RUN items but has PHYSICS_EVENT items. " + append msg "This is symptomatic of a Readout that did not include " + append msg "body headers in its data. " + append msg "Do you want to use $id as the source id for items " + append msg "missing body headers? If not, a unique source id will " + append msg "provided as a suggestion." + set answer [tk_messageBox -icon question -message $msg -type yesno -parent $m_view] + update + + if {$answer == "yes"} { + return $id + } + } + } + + # we couldn't figure out the correct source id to use or the user + # rejected our attempt to help them out. Pity. In any case, we can + # still help them by providing a unique source id. + set trialID 0 + while {$trialID in $ids} { + incr trialID + } + return $trialID + } + } #------------------------------------------------------------------------------ @@ -860,3 +960,185 @@ return [$m_view getWindowName] } } + + +## +# ConfigurationFrame +# +# This is the megawidget that the user will ultimately interact with. It is a +# megawidget whose hull is a ttk::frame. Other software should not directly +# instantiate one of these unless it knows what it is doing because these are +# only useful when attached to a JobConfigUIPresenter. +# +# There are a few useful options that can provided to configure the way that +# this appears to the user: +# +# -missingwidget a MissingSourceUIView object +# -buildwidget a BuildEventsWidget object +# -showbuttons boolean value indicating whether to show buttons or not +# (basically this determines whether this is its own master) +# -buttontext the text to put on the "Accept" button +# +# Otherwise, the other options contain the display state of view. These are the +# value of the data that could be written into the model if the presenter +# decides to synchronize to the view state. +snit::widget ConfigurationFrame { + + option -nsources -default 2 ;#< number of end runs to expect + option -jobname -default "Job" ;#< name of job (not used) + option -missingwidget -default "" ;#< name of missing source widget + option -buildwidget -default "" ;#< name of buildevents widget + + option -showbuttons -default 1 ;#< show buttons or not? + option -buttontext -default "Create" ;#< Label to put on button + + component m_fileTree + + variable m_presenter + variable m_paramFrame + + constructor {presenter args} { + set m_presenter $presenter + + $self configurelist $args + + ttk::label $win.jobNameLbl -text "Job name" + ttk::label $win.jobNameEntry -textvariable [myvar options(-jobname)] + + set top $win.fileFrame + set m_fileTree $top.files + + ttk::frame $top + ttk::label $top.addFilesLbl -text "Add run files" + FileList $m_fileTree -sort 1 + grid $top.addFilesLbl -sticky new + grid $top.files -sticky nsew + grid rowconfigure $top 0 -weight 1 + grid columnconfigure $top 0 -weight 1 + + set m_paramFrame $win.params + set top $m_paramFrame + ttk::frame $top + + ttk::label $top.nsrcsLbl -text "Number of end runs to expect" + ttk::entry $top.nsrcsEntry -textvariable [myvar options(-nsources)] -width 3 + + set analyze $top.analyze + ttk::frame $analyze + ttk::label $analyze.help -text "Analyzing the file extracts information from it \nand fill in some of the information above." + ttk::button $analyze.analyze -text "Analyze File" -command [mymethod onAnalyze] + grid $analyze.help -sticky nsew -padx 9 -pady 9 + grid $analyze.analyze -sticky nsew -padx 9 -pady 9 + grid rowconfigure $analyze all -weight 1 + grid columnconfigure $analyze all -weight 1 + + set buttons $win.buttons + ttk::frame $buttons + ttk::button $buttons.cancel -text "Cancel" -command [mymethod onCancel] + ttk::button $buttons.create -textvariable [myvar options(-buttontext)]\ + -command [mymethod onCreate] + grid $buttons.cancel $buttons.create -sticky e -padx {9 0} + + grid $top.nsrcsLbl $top.nsrcsEntry -sticky nw + if {$options(-missingwidget) ne ""} { + $self gridMissingWidget $options(-missingwidget) + } + if {$options(-buildwidget) ne ""} { + $self gridBuildWidget $options(-buildwidget) + } + grid $analyze -row 3 -sticky nsew + grid configure $top.nsrcsEntry -sticky ne + + grid $win.fileFrame -row 0 -column 0 -padx {0 9} -sticky nsew + grid $top -row 0 -column 1 -padx {9 0} -sticky nsew + grid x $buttons -row 2 -padx 9 -sticky sew -pady 9 + grid columnconfigure $win {0 1} -weight 1 -minsize 300 + } + + ## @brief Grid the missing sources widget + # @param name name of the widget + method gridMissingWidget {name} { + grid $name - -row 1 -sticky new -pady 9 -in $m_paramFrame + $self configure -missingwidget $name + } + + ## @brief Grid the build event widget + # @param name of the widget + method gridBuildWidget {name} { + grid $name - -row 2 -sticky new -in $m_paramFrame + } + + ## @brief Forward button press event to presenter + # + # This does not check whether the presenter exists. It is assumed that the + # user has already set this up. + method onCancel {} { + $m_presenter cancel + } + + ## @brief Forward button press event to presenter + # + # This does not check whether the presenter exists. It is assumed that the + # user has already set this up. + method onCreate {} { + $m_presenter create + } + + method getFileListPresenter {} { + return $m_fileTree + } + + method onAnalyze {} { + $m_presenter onAnalyze + } + +} + +## +# AnalysisProgress +# +# This is the megawidget that the user will see when/if they choose +# to analyze the file(s) they have selected. It is just a progress bar +# and an abort button along with a message telling them to be patient +# while the file is being analyzed. The progress updates automatically +# so that the user has visual indication that something is happening. +# +# There is an -onabort method that is called when the user presses +# the abort button. It is on the caller to define the appropriate behavior +# on abortion of the analysis. +# +snit::widget AnalysisProgress { + + option -onabort {} + + variable m_presenter + + constructor {presenter args} { + set m_presenter $presenter + + $self configurelist $args + + ttk::label $win.label -text "Analyzing File. Please be patient" + ttk::progressbar $win.progbar -orient horizontal -mode indeterminate + ttk::button $win.abort -text "Abort" -command [mymethod onAbort] + grid $win.label -sticky nsew + grid $win.progbar -sticky nsew + grid $win.abort -sticky sew + + grid rowconfigure $win all -weight 1 + grid columnconfigure $win all -weight 1 + + $win.progbar start 25 + + } + + method progress {} { + $win.progbar step + } + + method onAbort {} { + uplevel #0 $options(-onabort) + } + +} + Modified: trunk/main/daq/eventbuilder/offlineorderer/JobProcessor.tcl =================================================================== --- trunk/main/daq/eventbuilder/offlineorderer/JobProcessor.tcl 2015-11-13 10:42:07 UTC (rev 5142) +++ trunk/main/daq/eventbuilder/offlineorderer/JobProcessor.tcl 2015-11-13 12:35:18 UTC (rev 5143) @@ -25,14 +25,17 @@ package require DataSourceManager package require DataSourceMonitor package require EVBStateCallouts +package require ringsourcemgr package require ExpFileSystem package require OfflineEVBInputPipeline package require OfflineEVBHoistPipeline package require evbcallouts +package require evbconfigure package require Thread package require OfflineEVBOutputPipeline +package require RunStateObserver ## @namespace HoistConfig # @@ -83,13 +86,18 @@ variable sourceManager "" variable stateMachine "" variable completionStatus FAIL ; # assume failure unless told otherwise + variable runStateObserver "" + variable processingComplete 0 ## @brief Pass the options # constructor {args} { set sourceManager [DataSourcemanagerSingleton %AUTO%] set stateMachine [RunstateMachineSingleton %AUTO%] + set processingComplete 0 + set runStateObserver [RunStateObserver %AUTO% -onend [mymethod onEndRun]] + $self configurelist $args } @@ -105,6 +113,8 @@ $stateMachine destroy set stateMachine "" } + + $runStateObserver destroy } ## @brief Register all of the bundles that we need @@ -114,8 +124,9 @@ # rdoCalloutsBundle has already been registered ::EventLog::register ::EVBStateCallouts::register + ::RingSourceMgr::register + ::EVBConfigure::register ::DataSourceMgr::register - # ::DataSourceMonitor::register } ## @brief return the data source manager known to this @@ -142,20 +153,57 @@ # hook to handle one-time startup procedures $self setup + set processingComplete 0 if {![catch {$self startProcessing} msg]} { - # the transition to active was successful so we should expect that - # processing succeeds. - # - # Tell the eventlog that it is okay for it to exit, because that is - # what we expect. - EventLog::runEnding ;# wait until run is ended and finalize - set completionStatus OK + set newRing tcp://localhost/[$options(-evbparams) cget -destring] + set currentRing [$runStateObserver cget -ringurl] + if {$currentRing ne $newRing} { + if {$currentRing ne {}} { + $runStateObserver detachFromRing + } + $runStateObserver configure -ringurl $newRing + $runStateObserver attachToRing + } + + vwait [myvar processingComplete] + + # wait for some time to finish getting all of the end runs + after 100 + + if {$processingComplete == 1} { + # job ended normally + puts "we are going to try to end this thing" + + if {$::EventLog::loggerPid != -1} { + ::EventLog::runEnding + } + # the transition to active was successful so we should expect that + # processing succeeds. + # + # Tell the eventlog that it is okay for it to exit, because that is + # what we expect. + # + # Currently we have no mechanism for aborting a run in progress. + # + set completionStatus OK + $self stopProcessing ;# stop the processing pipelines + + } else { + # run aborted + puts "aborted" + set completionStatus ABORT + $self forceStopProcessing + } + } - $self stopProcessing ;# stop the processing pipelines return $completionStatus } + method onEndRun {item} { + set processingComplete 1 + } + ## @brief Load and configure the callout bundles # # @@ -219,7 +267,6 @@ # the update calls. # method waitForHalted {} { - variable stateMachine set state [$stateMachine getState] while {$state ne "Halted"} { @@ -232,7 +279,6 @@ ## @brief Transition the state machine into a NotReady state # method stopProcessing {} { - variable stateMachine if {[$stateMachine getState] eq "Active"} { $stateMachine transition Halted @@ -243,6 +289,11 @@ $self tearDown } + method forceStopProcessing {} { + $stateMachine transition NotReady + $self tearDown + } + ## @brief Transition the system into a clean state # method tearDown {} { @@ -304,8 +355,11 @@ set ::HoistConfig::id [$options(-hoistparams) cget -id] set ::HoistConfig::expectbh [$options(-hoistparams) cget -expectbheaders] - # define a startEVBSources proc or overwrite it if it already exists - eval { proc ::startEVBSources {} { EVBC::startRingSource tcp://localhost/$::HoistConfig::ring $::HoistConfig::tstamplib $::HoistConfig::id $::HoistConfig::info $::HoistConfig::expectbh}} + ::EVBC::registerRingSource... [truncated message content] |
From: <ro...@us...> - 2015-11-13 10:42:10
|
Revision: 5142 http://sourceforge.net/p/nscldaq/code/5142 Author: ron-fox Date: 2015-11-13 10:42:07 +0000 (Fri, 13 Nov 2015) Log Message: ----------- * Make fragment handling use a dynamic buffer as large stack buffers seem to fail. * Update handling of body header determination. Modified Paths: -------------- trunk/main/ChangeLog trunk/main/base/dataflow/ringtostdoutsw.ggo trunk/main/configure.ac trunk/main/daq/eventbuilder/CFragmentHandlerCommand.cpp trunk/main/daq/eventbuilder/ringsource/CRingSource.cpp trunk/main/daq/format/CDataFormatItem.h trunk/main/daq/format/CRingItem.h trunk/main/daq/format/CRingPhysicsEventCountItem.h Modified: trunk/main/ChangeLog =================================================================== --- trunk/main/ChangeLog 2015-11-12 21:21:51 UTC (rev 5141) +++ trunk/main/ChangeLog 2015-11-13 10:42:07 UTC (rev 5142) @@ -1000,11 +1000,13 @@ instead. * Fix Bug #4933 - after recording run control buttons are not re-enabled - * Fix Bug #4945 - Sources permuted between ReadoutGUI sessions. The + * Supply Feature #4672 - remove ringfragmentsource as bottleneck + in event building systems. + * Fix Bug #4945 - Sources permuted between ReadoutGUI sessions. The DataSourceManager::sources method now returns a properly ordered list of parameter dicts, and reading in .settings.tcl causes sources to be added in the order of their source ids. * Fixes bug #4906 - MCFD16Control fails to properly display state of channel mask in the GUI. - * Fixes bug #4948 - CCUSBReadout fails to output END_RUN. + * Fixes bug #4948 - CCUSBReadout fails to output END_RUN. Modified: trunk/main/base/dataflow/ringtostdoutsw.ggo =================================================================== --- trunk/main/base/dataflow/ringtostdoutsw.ggo 2015-11-12 21:21:51 UTC (rev 5141) +++ trunk/main/base/dataflow/ringtostdoutsw.ggo 2015-11-13 10:42:07 UTC (rev 5142) @@ -2,6 +2,6 @@ version "1.0" purpose "Output data from an NSCL Ring buffer to stdout." -option "mindata" m "Ring get chunking factor" string optional default="1m" +option "mindata" m "Ring get chunking factor" string optional default="10m" option "timeout" t "Ring get timeout in seconds" int optional default="1" Modified: trunk/main/configure.ac =================================================================== --- trunk/main/configure.ac 2015-11-12 21:21:51 UTC (rev 5141) +++ trunk/main/configure.ac 2015-11-13 10:42:07 UTC (rev 5142) @@ -3,7 +3,7 @@ AC_PREREQ(2.61) -AC_INIT(nscldaq, 11.0-018, fo...@ns...,[], [http://www.sourceforge.net/projects/nscldaq]) +AC_INIT(nscldaq, 11.0-019, fo...@ns...,[], [http://www.sourceforge.net/projects/nscldaq]) AC_CONFIG_SRCDIR([/utilities/StringsToIntegers.h]) Modified: trunk/main/daq/eventbuilder/CFragmentHandlerCommand.cpp =================================================================== --- trunk/main/daq/eventbuilder/CFragmentHandlerCommand.cpp 2015-11-12 21:21:51 UTC (rev 5141) +++ trunk/main/daq/eventbuilder/CFragmentHandlerCommand.cpp 2015-11-13 10:42:07 UTC (rev 5142) @@ -70,6 +70,7 @@ // objv must have the command name and a socket name: int status = TCL_OK; + uint8_t* msgBody(0); try { @@ -101,11 +102,10 @@ if (msgLength > 0) { - uint8_t msgBody[msgLength]; + msgBody = new uint8_t[msgLength]; n = Tcl_Read(pChannel, reinterpret_cast<char*>(msgBody), msgLength); if(n != msgLength) { - interp.setResult("Message Body could not be completely read"); - return TCL_ERROR; + throw std::string("Message Body could not be completely read"); } // Dispatch the body as the flattened fragments they are: @@ -149,7 +149,7 @@ interp.setResult("Unanticipated exception in fragment handler"); status = TCL_ERROR; } - + delete []msgBody; return status; } Modified: trunk/main/daq/eventbuilder/ringsource/CRingSource.cpp =================================================================== --- trunk/main/daq/eventbuilder/ringsource/CRingSource.cpp 2015-11-12 21:21:51 UTC (rev 5141) +++ trunk/main/daq/eventbuilder/ringsource/CRingSource.cpp 2015-11-13 10:42:07 UTC (rev 5142) @@ -48,7 +48,7 @@ -static size_t max_event(1024*128); // initial Max bytes of events in a getData +static size_t max_event(1024*1024*10); // initial Max bytes of events in a getData /*---------------------------------------------------------------------- * Canonicals @@ -283,11 +283,13 @@ // if we are here, then all is well in the world. - frag.s_barrierType = pRingItem->s_header.s_type; // default. + frag.s_barrierType = 0; // default. switch (pRingItem->s_header.s_type) { case BEGIN_RUN: + frag.s_barrierType = 1; break; case END_RUN: + frag.s_barrierType = 2; m_nEndsSeen++; if (m_fOneshot && (m_nEndsSeen >= m_nEndRuns)) { doExit = true; Modified: trunk/main/daq/format/CDataFormatItem.h =================================================================== --- trunk/main/daq/format/CDataFormatItem.h 2015-11-12 21:21:51 UTC (rev 5141) +++ trunk/main/daq/format/CDataFormatItem.h 2015-11-13 10:42:07 UTC (rev 5142) @@ -61,6 +61,7 @@ uint16_t getMajor() const; uint16_t getMinor() const; + // object methods: Modified: trunk/main/daq/format/CRingItem.h =================================================================== --- trunk/main/daq/format/CRingItem.h 2015-11-12 21:21:51 UTC (rev 5141) +++ trunk/main/daq/format/CRingItem.h 2015-11-13 10:42:07 UTC (rev 5142) @@ -96,7 +96,7 @@ const _RingItem* getItemPointer() const; uint32_t type() const; bool mustSwap() const; - bool hasBodyHeader() const; + virtual bool hasBodyHeader() const; uint64_t getEventTimestamp() const; uint32_t getSourceId() const; uint32_t getBarrierType() const; Modified: trunk/main/daq/format/CRingPhysicsEventCountItem.h =================================================================== --- trunk/main/daq/format/CRingPhysicsEventCountItem.h 2015-11-12 21:21:51 UTC (rev 5141) +++ trunk/main/daq/format/CRingPhysicsEventCountItem.h 2015-11-13 10:42:07 UTC (rev 5142) @@ -98,6 +98,7 @@ uint64_t getEventCount() const; void setEventCount(uint64_t count); + // Virtual method overrides: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |