DRAMA Change List, Introduction

This list is a crude list of the Changes made to DRAMA. It was started on 7-Aug-1995. It is not considered perfect and in particular, may not have full details of Imp and Sds changes. The assumed author of the changes is TJF.


config sub-system:Add DramaProgramTargetLS() dmakefile marco to support building against the DRAMA shared library.

config sub-system:Fix shared library build issues on MacOsX, Linux and Solaris.

config sub-system:Fix compiler option issue causing run-time incompatiblity between C and C++ code on Solaris using Sun Workshop compilers.

dits sub-system:Add -lrt to solaris link.

sds sub-system, dits sub-system,dul sub-system, git sub-system, djava sub-system :Fix various bulid problems on Solaris using Solaris C++ and problems when C++ is not available.

sds sub-system:The sdstest.c regression test program is now built using both C and C++ to check for potential problems in one but not the other.

sds sub-system:Add the SdsCheckBuild() function - which can check for consistency between the build environment of the caller and the build environment sds itself.

DRAMA 1.6.3, 3rd Nov 2009


sds sub-system:Add SdsListInUse(3) routine that will list the set of SDS IDs which are currenty being used to stderr. The SdsSetWatch(3) routine is now able to watch all SDS IDs and to watch for creation of new SDS IDs.

dits sub-system:Ensure DITS handles a two tasks connecting to each other at the same time. The buffers actually used will be the maximum of the requested buffer sizes, but this will be different from the case where it is not set up simunatenously where the sizes used by the first buffer apply . Note that this can (but won't always) waste a IMP connection (and the assoicated memory) if the sequence occurs in a particular order. The wasted connection, if any, will be released correctly when the path is closed.

dits sub-system:Impove SDS Leak check code, in particular, ensure it does not report an output argument which will be deleted to be a leak.

dits sub-system:Improved logging under debugging flags in some conditions.


config sub-system:Ensure that we can build with different compiler specified in drama_local.cf file. Also allow compiler to be used for dependency checks to be different from that used for mail compilations.

config sub-system:dmkmf modified to set the host type to the same value as returned by the $CONFIG_DIR/hosttype script, allowing dramastart to change the host type if needed.

drama sub-system:dramastart command now selects alternative MacOsX build if the default does not exist.


imp sub-system:Define VxWorks version of IMPZ_TRANSIENT_ERROR as per the result of investigations made by Russell Kackley at JACH.


dits sub-system:Fix documentation flaws in DitsPutConnectHandler()>, DitsPutConnectHandler(), and DitsPutRegistrationHandler()


config sub-systems, changes flow on to most of the others:

Fix issue in drama_make where -co option would not work in some cases

Use the lastest version of the X11 imake command source. (This is run by dmkmf). Linux and MacOsX versions now use this version (from $CONFIG_DIR) rather then the system version (which disappears in later versions of X11, including that distributed with MacOsX Snow Leopard).

The make depend makefile target that was generated by dmkmf is replaced by functionlity in GCC and GNU Make. (But only if you have GCC and GNU Make, otherwise the old approach is used.).

Add the AutoTest() dmakefile marco. This is intended to be used to wrap targets running regression tests which are run as part of the build.

Add -noautotest, -nodepend and -h options to drama_make and dmkmf commands. -noautotest disables anything wrapped in the new AutoTest() macro. -nodepend disables the dependency checking code.

Fix issues with default linux builds due to requirement for Posix threads library.

Remove support for Ultrix, OSF and SunOs (pre solaris) hosts.

DRAMA 1.6, Sep 2009


Only up to September 2009.


config/java sub-systems:Support Mac Intel 64 bit and Fat (32/64 bit intel) builds. (dtcl not yet tried - I don't have the Tcl libraries in 64 bit as yet).

sds system:sdstest command now outputs details used by and results from sdsport.h.


dits sub-system:Fix bug in ditsgetpath.c - if DITS__FINDINGPATH is returned then the active DitsPathGet() operation fails.


messgen sub-system:Add -x option to messgen command, which makes it easier to generate some types of Makefile. Increase size of strings used for filenames to 2000 (was 200).


imp sub-system:cleanup command modified to only kill tasks that were part of the IMP system it was run under. Added -k option to revert to the previous behaviour.


dtcl sub-system:Fix string buffer overflow issue in Translate command (if result is over 240 characters).


After a bug report from Russell Kackley, it is apparent you cannot use the DITS_M_X_COMPATIBLE nofication method on VxWorks if also using DitsSignal*() from an ISR or another task - as the notification method may in some rare cases block. Update documentation to DitsAppInit() and DitsSignal*(). Add code to DitsSignal() to output a message (to the VxWorks console) if called in this case.


dits sub-system:DitsPutDelay() check gives some more details on the location of the problem.

dits sub-system:Add test target to dmakefile

dits sub-system:Add -h and -x options to ditscmd.

dits sub-system:Add DitsActionTransIdWait() and DitsUfaceTransIdWait() and reimplement DitsActionWait() and DitsUfaceWait() in terms of these. Many changes in this area to fix various issues discoverred in implementing the new routines and others discovered by JACH. DulGetPathW() and DulMessageW() now use these versions.

dits sub-system:Add use of ImpWaitForSends() during shutdown. The impwaitforsends.c routine is currently part of DITS - will be added to IMP later. This causes DRAMA to wait for message in the progress of being sent to other tasks to be sent, before the task finally shuts down. This happens during the call to DitsStop() and is done to make the shutdown of tasks cleaner.


sds sub-system:Remove fortran/starlink interfaces.

dul sub-system:Ensure Tcl commands work correctly if CONST84 defined or not defined.

git/dtcl sub-systems:Improve const correctness.


config sub-system:AnsiC and AnsiCFull macros now check for declarations in code. Add AnsiC99 and AnsiC99Full marcos for code wanting a later compiler.



drama sub-system: Ensure LD_LIBRARY_PATH and DYLD_LIBRARY_PATH are exported by drama.sh. Fix problems with MANPATH variable definition.


dtcl sub-system:Use Tcl trace events to implement SDS leak checking around top-level Tcl commands.

dtcl sub-system:Replace use of Tcl_GlobalEval by Dtcl___GlobalEval in all sensible cases to expand SDS leak checking around all DRAMA event triggered tcl commands.


dtcl sub-system:Fix SDS ID leak in pget command. Don't document -deletearg etc. for pget.

dtcl sub-system:Ensure pset long argument version handles -deletearg etc correctly.


dtcl sub-system:Ensure when positioning window under mouse on Xinerma screen we don't get too close to the bottom of right of screen.


sds sub-system: Fix initilisation error in Arg C++ constructors. Fix issue in C++ Cleanup() method. Tidy up warnings releated to SDS check code.


sds sub-system: Fix VxWorks semphore bug. Update standalone sds_err.h.


sds sub-system: Add new functionality to support checking for SDS leaks. Refactor SDS sempahore code.

dits sub-system:Use new SdsCheckInit()/SdsCheck() functions to check for SDS leaks around action/uface functions if new flag DITS_M_LOG_SDS_CHECK is set.

dits sub-system:Add new item in current data structure - flags, which allows the above check to be turned off on an action specific basis. dits sub-system:

dits sub-system:Add DitsSetFixFlags() function to allow the above flag to be set and DitsGetFixFlags() to fetch it.

dtcl sub-system: Add new Tcl commands SdsFreeIdCheck, SdsEvalAndCheck, DitsSetFixFlags.

Wrap calls to user callback routines around SDS checks if DITS_LOG_CHECKSDS flag is set.


dits sub-system: Fix crash in Dits___ImpDisonnected() occuring if a task comes back and then exits before we get a new path to it.


git sub-system:Fix crashes under VxWorks in log system.


git sub-system:Log files always have a .00,.01,.02 etc between the date and .log, and we never open an old log file any more - we always create a new one using this sequences - treats compressed files as per the main log file in this scheme.

git sub-system:Count the bytes written to the log file internally to remove dependence on ftell() so we can make the next change. Also warns first time round when log file write fails.

git sub-system:Add a "compress" flag to GitLogger::GitLogger(), and use it to compress log files as we write them (not under VxWorks) using popen() and gzip.


dtcl sub-system: Add new Tcl commands DitsGetTaskType and DitsGetTaskDescr.


sds sub-system:Expand the SdsSetWatch(3) routine functionality to cover most SDS events.


dits sub-system:DitsPutDelay becomes a function rather then a macro - and now checks for an exessive delay.

dits sub-system:DitsDumpAction() now catches cases of invalid paths.

dits sub-system:Ensure that DitsPutUserData() item is initialised to zero.


dits sub-system:The DITS signal exit handler can't fork under MacOxX due to restrictions introduced in Lepoard. Don't do this any more, just clean up DRAMA rather then trying to dump core.


git sub-system:Changed the GitLogger logfile name format from {taskname}-DDMMYYYY.log to {taskname}-YYYY-MM-DD.log.



git sub-system:Fix buffer overflow issue in GitMonitor.


dits sub-system:On unix systems, the new PRINTENV control message will trigger the printing of envrionment variable values.

dits sub-system:Add ditssavearg unix command. This command implements a task which has an action which will save the value of any argument to the action in a file.

djava sub-system:We need to declare our own version of the environ global variable when building the Mac sharable - to avoid a MacOsX link error. This global variable is being used by DITS now for the PRINTENV control message.


config, dtcl sub-systems. Add X11 Xinerama support via DtclTkScreenInfo command and modifications to default Dtcl/Tk dialog commands.


Revisions to IMP Interface selection, including the addition of the IMP_INTERFACE environment variable.


git sub-system:Modify GitArg sequence of routines to improve the messages output when errors occur. Impove the commenting of parameters.


djava sub-system:Reflect recent changes to DITS_LOG_ALL flag value.


git sub-system:Fix various bugs triggered by re-initialising GitLogger.


djava sub-system:Stop listing sds structures in mointor changed handler.

19-Sep-2007 to 11-Oct 2007

imp, dits, dtcl sub-systems: Support registrar tasks. Basic changes in IMP, add the DitsPutRegistrationHandler() routine to Dits and the DitsRegistrationHandler command to dtcl. Add the DITS_M_REGISTRAR flag. dtcl sub-system::Add DitsConnectHandler and DitsTaskNode commands.


dtcl sub-system: Ensure that if dialogs appear quickly, the DtclTk dialog positioning code does not cause screen lockouts.


dtcl sub-system:dtcltk.c and dtclmodule.c will now only add and put parameters if the parameter system exists.


dtcl sub-system:Under MacOsX, ensure that dtcl and dtk link in everything in there libraries so that they can dynamically load stuff that links against them.

dtcl sub-system:Use C++ to link dtk and dtcl if available. dtcl sub-system:DTCL_PROMPT parameter added to Dtk - the lack of this was an oversite I think and the parameter was being used. Main impact is that the DTK prompt has changed


dits sub-system:A Monitor ADD message now uses the value of the DITS_M_SENDCURRENTflag as set on the associated START message - ored with the value with the ADD message.

dits sub-system:Revap SDSLEAKCHK control message output - it is now easier to understand.

dits sub-system:Add -z option to ditscmd to allow the user to change the "equals" flag in the Name=value argument naming convention to using the specified character.

dits sub-system:Fix various include files that had "extern C" in the wrong spot.

dits sub-system:Add C++ version of DitsTaskFromPath() which returns value directly.

dul sub-system:dul.h had an extern "C" in the wrong spec. Fixed.

git sub-system:Add GitLoggerTune function - allowing us to turn flushing, file syncs and background thread. Under linux, the fsync mode is turned off by default due to performance problems. GitLoggerTune() can turn it back on.

git sub-system:GitLogger Posix Thread support now turned back on, but the thread must be enabled using GitLoggerTune(). This change resulted in some refactoring to allow the semaphore to be created all the time, regardless of if the posix thread is running.

git sub-system:GitLogger now implements a file size limit of 1/2Gb - with the file re-opened with a different name under these conditions. 1/2Gb is well within the normal limit of 2Gb - so we don't worry about catching every case where it might occur - just the main logging entry and file open.

djava sub-system: Was not linking in SYS_LIBRARIES to sharable - which causes the link to fail after recent GIT changes.


dtcl sub-system:Replaced the free() call with the Tcl_Free() in DtclDitsScanTasks() function. This is because doing a DitsScanTasks in the Dtcl (shell) generated this error message
"glibc detected ... free() : Invalid next size (fast) : 0x08055428 ***". 
By replacing the free() with Tcl_Free() call, it fixed the problem (and is the right thing to do).


dtcl sub-system:Support display of Cancel buttons in different colors in DtclTkDialog - introduced flags for the special buttons. Add DtclTkDialogButOpts to set these colors.

dtcl sub-system:Support different and bettter positioning of dialogs in dtcltk.tcl. Allow other programs to use dtcltk.tcl features in this area.


djava sub-system:Pick up Java error source files of other sub-systems via environment variables - the other sub-systems all release there java error files now.


Support operation on machines with multiple IP addresses or no IP address, or which have a DHCP allocated IP address.


drama sub-system:Put missing endif into drama.csh.


sds sub-system:Fix bug in SdsRead() to ensure it validates files correctly, avoiding possible crashes. Fix memory deallocation bug in SdsRead(). Modify ArgCvt() to call SdsResize() only if it needs more space (fixing an issue that might cause memory fragmentation under VxWorks.


sds sub-system:Refactor Sds__get_id() to tidy up semaphore handling on errors. Fixed but where UINT64 was incorrectly being defined as long long when long is 64 bits. Fixed bug in arg.c when converting 32/64 bit unsigned integers integers to strings when long is 64 bits.

dits sub-system:DUI SDS structure logging will log the ID value itself.

djava sub-system:Fix bug in Arg.C - was treating jint as a SdsIdType, which is not correct when passing addresses.

djava sub-system:Fixed a bug in DramaPath.C where the wrong value was being passed to a logging call - causing a crash.

djava sub-system: When logging SDS structure contents, log the ID as well.


config sub-system:Impoved solaris sharable library builds, but only works if we have g++. Add new targets to dmakefile's, dramadirs1, dramadirs2, dramadirs2l which allow us to output environment variable settings for different sheels.s


dtcl sub-system:Fix bugs in calls to various Tcl functions which became evident on 64 bit linux. Release Tcl and Java version of errror include files, and the fortran version of the arg one.


config sub-system:Add -fpic option on Linux builds, to support building shared libraries.

dul sub-system:Add routine DcppVarArgsToSds(), used internally to format a argument list into an SDS structure. Can be used by user code as well (current has a C++ interface, I might change that).

git/dtcl sub-systems:Revamp shared library build - had found that libdrama.so was actually empty under linux.


After 16-Mar-2009.


dtcl sub-system: Catch fatal X11 IO errors and tidy up DRAMA correctly as we go down. Tried to keep things going when it was not the main display, but this does not work reliably due, in part, to a Tcl/Tk bug.


config sub-system:Add rxvt terminals to the listed supported by the ccdv program.


Support VxWorks defining INT64 based on _WRS_VXWORKS_5_X


djava sub-system:Reflect changes to DITS_ARG_* series of constants and ensure ValidateConsts() is invoked by testlink.


dtcl sub-system:Fix bug in dtk, should be evaulating startup code using Tcl_GlobalEval() instead of Tcl_Eval() to ensure it is always executed in the global namespace. This resolves a bug triggered if DTCL was loaded dynamically in a procedure.


imp sub-system:Add support for environment variables IMP_FIRST_BUFFER_SIZE and IMP_INT_BUFFER_SIZE. If defined, these values (in bytes) override the new defaults in imp.h.


config sub-system:Add macros to build JAVA include files using Messgen.

dits sub-system:Add DITS_ARG_READFREE and DITS_ARG_FREE flags to DitsPutArgument().

dits sub-system:ditscmd (unix) now supports -a [file] argument, which allows us to specify a file containing the arugment structure, making it easier to set up test scripts etc.

dits sub-system:ditscmd now sizes it global buffer appropiately for the reply buffer and the message buffer appropiately for the argument.

dtcl sub-system:Add new -argreadfree and -argfreeid options to the message sending commands.

dtcl sub-system:Add new READFREE and FREEID argument values to DitsPutArgument command.

dtcl sub-system:Automatically size the global buffer based on the reply buffer size in dtk.c, dtcl.c.


config sub-system:Add "-lresolv" to solaris links


sds sub-system:Add new methods DataAddressRW() and DataAddressRO() to SdsArrayAccessHelper(). sdslist command now handled bad arguments correctly.


sds sub-system:Add and use new constant SDS_C_MAXARRAYDIMS for the maximumn array dimension. Add new ArgCheckItem function and CheckItem C++ method. Add SDS_C_MAXCODE constant. Add constant ARG_NEWCPP_OVERLOADS which might help in working out if we are using the new C++ overloads.


config sub-system:Rename macro DramaSystem to IsDramaSystem since using DramaSystem stops us building within a Directory named DramaSystem.


drama sub-system:dramastart now passes arguments to program to be run. dramastart documentation and some of the output improved.

dits sub-system:DitsKillByName() now kills all actions of the specified name when the action is spawable.

djava sub-system:Ensure the testlink application uses the current version of the sharable library (set LD_LIBRARY_PATH and DYLD_LIBRARY_PATH correctly)


dul sub-system:Ensure we don't call DitsInterested() in UFACE context. Various improvements to logging.


git sub-system:Ensure gittpl.C returns on bad status correctly. Improve commenting in gittpl.h.


git sub-system:Revamp GitTask class, adding logging support and ensuring it meets the specification correctly.


dtcl sub-system:Fix problems in gitlogger sharable build.


config sub-system:Add MacOsX Intel support.

djava sub-system:Ensure Mac builds link with g++.

DRAMA 1.5.2, Mar 2006


Fix Dul against new SDS Arg C++ definitions and uses DitsSignalByNamePtr() rather then trying to pass a pointer in an Sds structure with DitsSignal() in the DcppTask class.


Sdp and Arg C++ intefaces modified to make code portable to 64 bit machines.

Various improvements to GitLogger.


Add a Log function to the Git logger which allows a time tag to be specified arther then just using the system time. Add GetLogger() static method to GitLogger class.


Fix a invalid transaction ID bug. Dumps now give machine names as proper node names rather then hex IP address.


Fix a bug in DJAVA's DramaPath.KickForget() functions - the message was transaction was NOT being forgotten.


Support 64 Bit intel machines (changes in various sub-systems).


Add a check to DcppHandler for a thread count greater then zero but no transactions outstanding.. Tidy up some error handling in Dcpp.


Revamp function DulFitsRead() and add DulFitsWrite().


Fix various logging problems and improve dumps.


You can now override IMP_MAX_TASKS in your local configuration files by defining ImpMaxTasks in your drama_local.cf file. For example #define ImpMaxTasks 64


Fix problems with multiple concurrent bulk transfers.


Improve logging around bulk data transactions.


Added DitsPathToName() and DitsGetActNameFromIndex().

Handle the case where transmitter is trying to send messages but thinks the current machine is the IP address This case causes a connection to hang and indicates a mis-configured /etc/hosts file. IMP now reports the problem sensibly.


Config Sub-system, AnsiC() etc. macros now have -Wno-long-long so that we don't get warnings about using long long types - allowing 64 bit support when available.


IMP now uses strerror() rather then sys_errlist[] when possible to avoid compiler warnings.


Add gittpl.h to Git library, C++ template interface to some GitArg functions.


The drama_rel_cleanup.sh script now lists user details of the directory to be deleted.


ditscmd now handles _ALL_ and _NAMES_ paramater get messages in a special way to ensure the data is output. Fixed lack of automatic MGET in VxWorks (I think) and output better error messages.

dui now handles _ALL_ and _NAMES_ paramater get messages in a special way to ensure the data is output. (This impacts many user interfaces, including dtcl, but only if the default handlers are used)

Fix a bug in SdpMGet() triggered by getting _ALL_ - which would cause the parameter system to be deleted.

Started getting rid of non-prototype C declarations in files I touched.


Modified DtclTkDialog (dtcltk.tcl) to try to display the dialog in a sensible position on a dual monitor X11 display.


Fix memory leak in Arg class (one method only).


Ensure DcppTask::SendForget functions correctly zero the transaction pointer when it is not created. DcppDispatch must not get transaction data when the transaction id is null.


Bad status form an action end routine causes strange errors - tidy up.


Fix bug in ImpZProcId() under VxWorks.


Ensure DitsLosePath() correctly handles a null path.

DitsDumpAction() should not output details on load transactions paths because they don't have any.


Fix some bugs in Ers's handling of reports sent by a sub-thread of another a DRAMA task.


Add AccessArray method to the SdsID class and the assoicated SdsArrayAccessHelper class. Fix a bug in SdsId.DeepCopy() when source is self.


Config Sub-system - Modified JavaPackageClassesMacro to avoid unncessary builds.


Add extra constructors to DJAVA Arg class. The SDS ID java class now keeps track of its contructor's location on the stack, to help in debugging problems. This information can be fetched using GetConstructorLocation().


Added IMP cleantask command.


DJAVA ported to JAVA 1.5.


Config Sub-system - modified to use gcc rather then ld to link sharables on linux.

Add RCSID constants to all DJAVA classes.


Increase GitLogger VxWorks background thread stack size.


impdump provides more details about time fields in reminders.


Improved documentation and logging in Dcpp classes. Ensure thread count going negative is handled correctly in DcppHandler.

Improve error reporting on file read problems in GitArgGetStruct().

DRAMA 1.5.1, Nov 2004


Add DitsGetDebug() (DramaDits).


Fix up doxygen generated documentation throughout. Links to C functions now work.


Add DitsGetSelfPath(). Improve DITS__NOSPACE error reports and grammer of DITS__CON_REJECTED error message (DramaDits, DramaDul).


Add new commands drama_gen_defaultver and drama_rel_cleanup.sh (DramaDrama).


IMP now supports recording the IMP event log in shared memory. Fix to IMP VxWorks load code to allow multiple resets under VxWorks to work properly. Fix Baja systems pid problem. Fix ImpRegister() problem releasing resources on failure. Add reset() function on VxWork, which neatly shuts down all tasks before rebooting. (imp).


dcpphandler.h should include DitsFix.h to get DitsGetContext() (DramaDul).


Fix error in MacOsX motif library library (DramaConfig).


Fix bug in DitsMonitor where forward messages are not handled correctly in some cases when a node name is involved.


Add support for cfitsio library to configuration files. The imake macro CFITSIO(x) does x only if cfitsio is enabled in the configuration files. (DramaConfig).


Wrap many more IMP system calls in proper checks for EAGAIN and EINTR (imp).


Added checks for EAGAIN and EINTR around all I/O calls in the UNIX file mapping code (imp).


Add SdsSetWatch() function to SDS library (sds).


Add SDSLEAKCHK control message. Clear argin and argout items on exit from DitsMsgReceive().


Add DJAVA SdsID methods EnableFreeIDWatch, ClearFreeIDWatch and SetDebugging. Remove use of weak globals from DramaUtil JNI module - they were causing crashes.


Ensure logging of all orphan handler details when we have a log file.


Disable POSIX thread in GitLogger - more trouble then it is worth. Replace by flushing features. (DramaGit).


Remove DramaDul dependencies on Starlink, instead use CFITSIO directly for FITS file support (DramaDul).


Document callback routines throughout (DramaDits).

Add DitsLogFlush() function and logFlush to DitsLogSysType.

Add LOGFLUSH and LOGINFO control messages.

Add DitsPutForwardMonSetupHandler() function.


Add DcppCallbackBase type used with a new DcppHandler method.


Fix crash caused by use of Weak References in JNI code (DramaJava).


Add new Wait() and WaitAll methods to DcppHandler.


Fix crash in DITS monitor code. Fix SdpGet() comments. (DramaDits).


Fix a bug in DtclCmdError which was causing the reported error message to be lost if we had to flush messages. (DramaTcl).


Fix problem when setting a task name including a node name in DcppTask::SetName() method. (DramaDul)


Modify JAVA code make use of native 64 bit integers with GNU compilers.


Fix GCC 3.4.0 compilation problems (DramaDul, DramaGit, DramaJava).


Support use of 64 bit integers - long long and unsigned long long under GCC for SDS types INT64 and UINT64. (sds).


The JAVABASE Make macro is now used to set the location of JAVA. Local configuration files can set "JavaBase" to set this value. Default values are set up for MacOsX and Solaris. (DramaConfig)


Add DJAVA DramaTask.CloseTask() method - which replaces DramaTask.Close() and allows better handling of exceptions.

Add DJAVA DramaError class which allows a DramaException to be converted to a non-checked exception.

DramaException.Report - no longer double reports the error.

The dmakefile now uses -linkoffline rather then -link when building HTML pages, and I have downloaded package-list from Sun to do this.


Fix a minor duplication in sds.c (sds).


Ensure dversion and dnet command documentation is generated. (DramaDrama).

Fix documentation error in DitsPutActEntRoutine().

DRAMA 1.5.0, Apr 2004


Added the ccdv program - which provides a nice display of the build process.


DRAMA_VERSION environment variable now set from $CONFIG_DIR/drama.h.


Ensure that DTCL compiles without warnings on Tcl 8.4.

Add various IMP changes from Nick Rees, JACH.


Add DitsForEachTransaction()

Add boolean Get/Put to Sdp C++ class and std::string support.

Add -v option to ditscmd.c. (Verbose output of responses). Thanks to Nick Rees.

Bug fixes to Sds__cell_ext(), SdsDelete, Sds__export() and SdsExtract() Thanks to Nick Rees.

WIN32 support updated. Thanks to Nick Rees.

Changes to get things working again for Solaris cc and CC (SC5.0).

Improve support for Flex and Bison (MESSGEN/SDS).


Expended network diagostics in IMP.


Fix long standing bug in IMP. The effect was that reminders would not happen when the were supposed to under some conditions.


Support DITS_M_SET_BYTES load flag throughout. (allows you to specify the VxWorks stack size for a task). Add DcppTask::SetTaskSize(). Add DTCL -bytes option to DramaLoad command.

Start support for -auto operation to VxWorks dramastart (not yet complete).

IMP_MAX_TASKS changed from 32 to 48. IMP minor revision number bumped from 0 to 1.


Improve DJAVA's logging.


Add DcppTask::GetDitsPath().

DJAVA's DramaPath.Error() (default implementation) was not outputing the error status - now does so.


DcppHandler revamped to change public interface to virtual functions and move significant sized functions to DcppHandler.C

DcppHandler now catches the object being deleted in the middle of being used and prints a warning.


GitTask now working.


Add LOGNOTE control message.

Fix problem which occurs if a task which we have connected to closes the connection - ditsimp.c/Dits___ImpConnect().

impz_unix.c had a call to statvfs() which did not check for EINTR. Fixed. (long standing bug - but only seen at AAO recently).


Support use of std::string in places there char * is normally required in Arg C++ class if DRAMA_ALLOW_CPP_STDLIB is defined.


Add DcppTask::Delete() function. Tidy up Dcpp's handling of getting a path when a task has previously died. Add DcppTask::PutDisconnectHandler() and otherwise support disconnect handling in Dcpp.

Add GitTask class.


GitLogger modfied to log milliseconds, return immediately if logging a signal in the wrong task, default log levels set to " INST,ERROR,MSG". Now used DRAMA_LOG_LEVEL in addition to system specific environment variable to get the default logging level.


Fix a bug in DJAVA's DramaException.Report(Throwable e) method which could cause an exception.


Catch malloc error in SDS. Fix bug in ArgSdsList() which was causing it to return errors when but buffer overflowed, rather then just ignoring the problem


If ImpRunTask() returns IMP_NO_SPACE, intercept it and add some context information as well as convert the code to DITS__LOAD_NOSPACE.

SdsList() will now list extra data on next line within [].


Add DcppForgetAll() function.


Ensure that IMP's VME shared memory blocks are allocated in a thread-safe manner.


Replace IMP's use of mktemp with mkstemp() to avoid compiler warnings on some machines. Fix a file descriptor leak.


DJAVA Changes. DramaException.Report(Exception) should take a throwable rather then an Exception.

Add DramaSem.CheckWeHaveIt() and DramaSem.WeHaveIt() methods.

DramaMonitor.Changed() and DramaTask.GetArgument() comments warn about SDS id become invalid when the action handler returns. When DramaMonitor has finished invoking Changed(), it uses SdsID.CleanUp() on the arg to ensure any references are clearly invalid.

Update documentation to warning about Swing thread issues and give links and examples. All methods where this applies are commented correctly.


Add DitsFmtReason() to allow better control of things DitsPrintReason() used to handle.


Improve DcppHandler class logging.


Add dnet command.

Add DcppTask::IsDead(), DcppTask::Initial() and DcppTask::Busy().


Standadarize DJAVA's internal logging.


Fix some SDS ID leaks in DJAVA.


Revamp Dcpp classes to use new logging features.


More work on GitLogger.


Extensive changes to DRAMA debugging features such that they use the logging system if this it is enabled. Internal logging is now always done through Dits___Log().

GitLogger uses UT rather then local time.


Add DitsPutActEntRoutine().

If action completes with bad status - ensure it does complete rather then reschedule.


Add DitsLogMsg and DitsLogSysEnabled DCTL commands.


GitLogger now uses posix threads on appropiate operating systems. Revamp handling of LOG_LEVEL parameters. Add ARGS level. Ensure screen logging does not result in double messages.


Add DramaPath.ObeyW() etc, GitLogger support, Semaphore timeouts to DJAVA.


Expand logging support to all communications calls.


Added falback to IMP_LOCALNODE for machines which have problems finding their own IP address.


GitLogger improvements.


Modify dmakefile/imake system to support Flex and Bison generated files. (Previously Bison was ok on some systems whilst Flex did not work).

If the target argument to dramastart is host then the host machine is presumed. This allows you to do ~drama/dramastart host program


Fix GitLogger formating issues.


Add DulMessageWArg().


Add $IMP_DEV/impuserport command - which outputs the user port number.


Ensure that IMP master does not reload transmitter and receiver more then five times, even if they loaded successfully. This avoids an endless loop if they are failing quickly.


Modify ditscmd.c and ditsappinit.c to improve error reporting.

Modify ditscmd.c to make -g an alias for -l and to fix formating errors in the handling of MsgOut() messages.

Replace DITS_REA_SIGNAL by DITS_REA_ASTINT through the later remains for compatibility.

Use ImpNodeName() throughout rather then ImpZNodeName().


Fix problem where confuction occurs if a GetPath operation is started in the middle of shutting down a connection.

IMP receiver is modified so that it does not enter the main loop if it can't bind to the receiver port number.


Support Mac Os X.


Fix bug in DitsActionWait() reported by Nick Rees, JACH. the count of outstanding actions was not incrementing the list pointer so would have hung if more then one.


Add DitsImpRedirect() (From Nick Rees, JACH).


Fix problem in ditsgetpath.c when doing a inquiry operation on a path set up both another task which has not yet sent a message. (From Nick Rees, JACH).


DRAMA inserted into the new AAO source code system. All DRAMA source files should now have RCS tags indicating the exact file they originated from in our source code system.


Support DUMPMON control message and DitsMonitorReport() function (From Nick Rees, JACH). Change to DitsPathGet() to support use of a different verson of ImpNetLocate() (From Nick Rees, JACH).



Support named arguments in ditscmd (From Nick Rees, JACH).


IMP modified to support Mac Os X. (Not yet supported by DRAMA as a whole).


Add SdsFindByName() (from Nick Rees, JACH).


Make the DJAVA Sdp class public.


DJAVA - Add Arg constructor which contructs from an SdsID item.

DJAVA - Fix problem in DramaTask.MsgOut() where a string was being double formated.

DJAVA - Implement SdsID methods which return items are strings. Fix bug in exception handling.


Added SdpUpdate DTCL command.


Fix SDS memory leak (from Nick Rees, JACH).

DRAMA 1.4.2, 11-Jun 2002

Please not that I am not certain of the release date of 1.4.2 compared to this time line - this point is approximately correct.


Do not actually lose the selfPath when DitsLosePath() is invoked for it. See DitsLosePath() for details.

Improve comments for DitsLosePath().

Do not allow the allocation of UFACE transactions when no UFACE routines has been put with DitsUfaceCtxEnable(). (Helps fix DJAVA problems).

Ensure DJAVA UFACE transactions are started within a DRAMA semaphore - Combined with above fix to help solve problems with unexpected orphan transactions triggered by JAVA's thread scheduling.

Fix problems in DJAVA Path disconnection code


Add more details to IMP ringer buffer doesn't fit errors.


Add dprintenv command to VxWorks drama commands.


Correctly terminate and handle long strings in DuiLoad().


Fix bug in config/Project.defs

DRAMA 1.4.1, Feb 2002

Please not that I am not certain of the release date of 1.4.1 compared to this time line - this point is approximately correct.


Fix bug in messgen.h - STS_K_SUCCESS macro was defined incorrectly


Fix some problems in DTCL when using later versions of Tcl/Tk.


Incorporate SDS bug fixes and compiler warning fixes notified by Nick Rees

DRAMA 1.4, 15-Jan-2002

Better support for version control (dmakefile - Makefile interactions), copy versions to verfile.txt in release directory, add VERSIONS DUMPACTACTIVE and DUMPACTALL control messages

Support for later solaris compilers


Add "use port xxx for *" option to IMP. (Note this turned out to be of no real use).


Support explict reply ports in IMP connections. (Note this turned out to be of no real use).


Add raw2sds program (DUL library). Converts a simple binary image into an SDS image.


Ensure we don't build SDS Tcl support for VxWorks.


Some support for Mac OS x added (config)

Add ErsGetTaskId() function to ERS library.

IMP layer not supports VME backplane shared memory


Add and document fortran SDS_FIND_BY_PATH() SDS_FREE_ID and SDS_READ_FREE interfaces.

Ensure SdsReadFree() does not cause a segmentation fault if the the SDS id is invalid.


Add ErsSetLogRoutine() function to ERS library.

Add GitLogger class and GitLoggerInit() function to the GIT library. This is a general logging faclity.


Support POSIX Sempaphores in IMP layer


Ensure that when Dtcl is loaded dynamically into Tk, the SDS photo image type is avalable.

Add new routine DitsPutDefCode() which allows the code associated with another action to be changed.


Fixed a bug in Mess (MessGetMsg()) which could have caused it to write past the end of string message buffers. This would have occured if the text of the message being translated for longer then the passed buffer.


Have added a new logging system which allows details to be log to a task specific log file. New DITS routines DitsSetLogSys() and DitsLogMsg(). New Git C++ class provided which implements such a logging system - GitLogger. Only action entry, MsgOut and Ers messages are logged at this stage, but support will be added later for more details.


Dtk now implements its own version of vwait to avoid exiting the program due to a DRAMA loop recursion. Instead we output a background error.


Make DJAVA's DramaTask.GetSymbol() method static to allow it to be accessed before the task is started.


Add messages which report (warning only) details if it appears the application has deleted or freeed an Sds id fetched by DitsGetArgument().


Fixed a bug in MONITOR CANCEL where it was not using the correct tag.


Fix crashes during a DitsPathGet operation whilst in a disconnect handler. Note that the exact order of operations has changed.


Drop DitsArgNoDel as it is dangerous. Add DitsSignalByIndexPtr() and DitsSignalByNamePtr() and DitsGetSigArg which provide similar functionality without the problems.


Revamp DRAMA internals to ensure we don't try to use out of date messages. Add new log flag DITS_LOG_IMPEVENTS, which taps into the IMP event monitoring system.


Add JAVA support to Config dmakefile system.


Add new DTCL commands, DitsPutActStatus and DitsPutArgument.


Added DJAVA (DRAMA Java interface) to release (Currenlty supported by solaris JDK 2.0 only). There is a link with all the details on the main DRAMA web page.

Added dversion command. This allows you to select a DRAMA version without having to redo the DRAMASTART command. Unix only at this stage.


Possible Incompatiblity The UFACE routine put by DitsUfaceCtxEnable() is now cleared after a return from DitsMsgReceive(). This ensures the UFACE routine is consistent, which was not the case in the past. If you call DitsMsgReceive and may send messages at UFACE context, then you must make sure you call DitsUfaceCtxEnable() each time before sending the message. As part of this, DRAMA is no more consistent at making sure the correct uface routine is available when invoking uface routine.


Output a better message is the IMP transmitter task does not have sufficent global buffer space for the reply direction buffers

Ensure that if we have received a connection from another task, we can get a path to that task. This was causing problems if we had not received any messages from the other task after it had got its path to us.


Add a version of DcppMonitor::Forward which provides a StartedHandler argument. The DcppMontior class functions which take variable argument lists provide an alternative format for the list.


Add DitsMsgWait() which allows a task to block waiting for a message without reading it.


Add DcppShared class to the C++ interface. Add a form of DcppHandler:SetTimeout() which allows the specification of a timeout handler routine.


Bulk data kick messages now support the message completion comming back before the bulk data done message. Added routine DitsGetEntComplete() which indicates which of the two actually indicate bulk data completion. Supported by DcppTask C++ Class.

Add support for SdsExportDefined, SdsIsExternal, SdsGetExternInfo and SdsSizeDefined to the SDS C++ class.

Add DcppSpawnKickArg and DcppSpawnKickArgUpdate - C++ interfaces to the equivalent DITS routines.

Add new versions of Obey method to DcppTask C++ class which return the transaction id already wrapped up in an SDS class.

Improve layout of complex methods in DRAMA C++ document.

The DcppHandler class increment operators, used to increment the number of message threads being handled by the class, have been replaced by the NewThread() method. The operators still exist but will be removed at some stage.


Can now build DRAMA for VxWorks using GNU make, but this requires that for any VxWorks build you set the macro HasGnuMake or HasSunStyleMake in your drama_local.cf file.


Fixed a SDS id leak when kicking spawnable actions via transaction id.

After a suggestion from Jim Wright, added QUIET macro to allow quiet compilation to be turned off. Use make QUIET="" to have make display the full compiler command.

Added support for VxWorks on Power PC (targets vwppc and mv2700). Add target aliases mv167 for vw68k. Thanks to Jim Wright for this.

Note the requriement (on the web install and build page) that if using VxWorks 5.3 or higher, you must source the appropiate VxWorks developement script before attempting to build DRAMA or DRAMA applications. Otherwise the assembler and other tools may not be correctly found. This is becase VxWorks does not locate the Gnu tools in the standard way.


DRAMA V 1.3b2.

Fixed a bug in the Monitor stuff introduced on 18-Jun, which would cause a crash under some conditions. Also removes an errant error message on task loss which has got back in.

Find a bug in Unix release of IMP which would cause program to crash without warning or coredump. This was a signal handler race condition.


Add the DulInt series of routines which make it easier to handle Interrupts..


Aded new routines DitsActIndexByName() and DitsIsActionActive(). The former allows you to fetch the action index of any action given it's name (the older DitsGetActIndex() only worked for the calling action). The other routine is used to determine if an action is active.


Revamp dmakefile's for embedded systems to allow use with both the new and old Gnu LD program. With the new Gnu LD, we can use the --whole-arhive and --no-whole-archive flags flags to enable building of C++ programs under VxWorks.

Improve Ers messages reported when there is insufficent space for a message.

Fix a problem where by the code which handled buffer empty notifications for monitored paramters did not itself handle full buffers, which it should.

Add the DRAMA_VERFILE environment variable. You can use this to check which version file you are using. If you are not using one it's value is null. (Unix only at this stage).

Dramatically improve the speed of the dramastart command.


Fixed a bug which resulting in DitsPutTransData()/DitsGetTransData() interferring with the code associated with UFACE transactions (see DitsUfaceCtxEnable() and DitsGetCode().)


The DRAMA start up scripts ($DRAMA/drama.sh and $DRAMA/drama.csh) now automatically source equivalent hidden files in the user's home directories ($HOME/.drama.sh or $HOME/drama.csh). This allows the user to add there own DRAMA specific start up commands.

DRAMA 1.2, 03-Mar-1999

Release of DRAMA V1.2 to the world.


Add a check to ensure a reference to a transaction in a message is to one in the range of memory we have used for transaction ids. This avoids possible access violations if we get a message we should not (which appears to happen sometimes, even though it should not).


Add support for Sending Bulk Data.


Improvements to the error reports output by DRAMA if we attempt to send to a task which has gone away (new code IMP__TASK_GONE) and if we fail to create a notification semaphore.


Release of DRAMA 1.2 to AAOEPP.

Release of libdrama.o under VxWorks modified. Now don't release lib*.o files for other systems and rely on gnu ld specific flag in building libdrama.o. This allows us to correctly build in c++ stuff for VxWorks. Add implementation of __exit (used by gnu c++) and cppinit and cppbye required to run global constructors and destructors). This has been done in GIT library.


Add JAVA language support to messgen.


Add DitsSpawnKickArgUpdate(). Used to update the transaction id in an existing Spawn Kick structure.

DcppTask::Obey() takes an extra argument, which is an address into which the transaction id is written. This allows calls to DitsSpawnKickArg() by tasks using DcppTask.


ADITS now correctly handles rejection of connections by DRAMA tasks. It also when setting up to monitor ADAM task existance, tries the task name with a colon appended as a process name if it can't find a process of the original ADAM task name. (This is needed as ADAM strips leading colons). A fix to ImpConnect and relevant changes to ADITS ensures that multiple ADAM tasks can talk to the same DRAMA tasks.


Incompatible change

DTCL now uses TCL's namespaces. All DRAMA commands are now in the "drama" namespace by default. You can change this to put them in the global namespace by defining the imake macro DtclUseGlobalNamespace in your drama_local.cf configuration file. For alternative ways of selecting this (per login session and per application), see the dtcl manual.

It is recommented that all new DTCL programs use namespaces. Note that this only works from Tcl 8.0 onwards.

Impending Incompatiblity

We would like to remove support for TCL versions prior to version 8.0. This will allow considerable code simplifcation and allow the use of more effect TCL approaches. Please let us know if this would be a problem (This change will probably occur when Starlink goes to TCL 8.0)


Add the -forcegcc and -nocompcheck flags to drama_make. This should mean we don't have modify the standard configuration files at all now.

DRAMA V1.2 Beta 2


DRAMA V1.2, Beta 2.

Beta for Linux testing.


Remove DitsArgType and replace by SdsIdType to avoid confusion. (Type is still defined to avoid compatibility problems)


Fix some problems in SDSC - the SDS compiler, which were causing crashes and errors when compiling arrays of structures.

Fix a problem which may cause a crash when using the action wait routines under VxWorks.


All access to environment variable/logical names in the higher levels of DRAMA is now via the Dits routines DitsGetSymbol(), which in turn uses ImpZGetSymbol() (which will be made public soon. This allows us to use the Windows registry to get Enviroment details.

DRAMA V1.2, Beta 1.


Improve error reporting from the VxWorks dramastart command.


Modify DcppTask routines to support interception of Ers and MsgOut messages. This should be transparent to existing code.


Ers modified to improve results if a program is in a hard loop reporting errors. Previously, when the error message buffer filled, each addition messages was output to stderr. Now Ers will dump all messages currently in the buffer and then start stacking the new messages. This will help you see the first messages if you are in a hard loop involving error reporting (calls to ErsRep).

Dtcl modified such that any error in the command specified with the Dtcl ErrorHandler command (used to output Ers messages) is reported to stderr instead of attempting to report it via Ers (this never worked well).


Much work to port DRAMA to WIN32.

Ensure clean compilation with egcs version of GCC (Gcc 2.8 version). This was done with a very high level of warnings, resulting in many minor coding problems being picked up. Unlikly to have any effect on operatoins as none indicated real errors

The transaction id scheme now has it's own memory manager. This manager should be far more efficent then malloc/free. It has a slightly higher memory overhead when a small number of transactions are used, improving with more outstanding transactions.

Added a new routine, ArgFind(). This is functionally equivelent to SdsFind() except that if an error occurs, it reports the name of the item you were trying to find. It is suggested that this routine replace SdsFind() in all applications using the Ers library (which includes all DRAMA programs). The Sdp library has been so modified, resulting in more error report lines if you specify an incorrect parameter name, either from the C calls to SdpGetx/SdpPutx and from parameter Get/Set messages.


Add DulErsInit(), DulErsMessage, DulErsPutRequest, DulErsAnnul() and DulErsRep(). These routines allow you to control the output of Ers messages by subsidiary tasks.

Add DitsUfaceErsRep(). This allows Ers messages from subsidary tasks to be reported using ErsRep().


Fixed problem in dtcl sharable library which prevents -wait options to DRAMA commands from working. Ensured that variables (MessageBytes etc.) are not overwritten if the values are already set).


Port to Linux. No significat changes needed although exit hander code layout improved.


Add new -T option to sdsc command. This causes it to output TCL code instead of C code. The resulting TCL requires the new version of Dtcl. This is more a test of the completeness of the new Dtcl but may be usefull in some cases


Add new options to the sdsc command. -f allows you to genereate an entire function definition instead of just something to be included in another file. Specify the name of the function immediately after -f. The -t option allows you to specify the type of a variable to declare if none is declared within the include file. This elminate the common requirement for a special case in the include file to declare a variable in order to force the output of a structure definition. The variable type is specified immediately after the -t option. The -N is used with the -t option and specifies a name for the structure which is created.

The new dmakefile macro SdsIncludeFunction will run sdsc with it's new arguments. This can replace SdsIncludeFile.


Add new SDS commands to Dtcl, SdsExtract, SdsDelete, SdsFillArray, SdsGet, SdsGetExtra, SdsInsertCell, SdsNew, SdsPut, SdsPutExtra and SdsResize


Added new commands DitsLosePath to Dtcl. Exiting command DitsSetDebug modified to accept enumerated debugging level names

POSSIBLE COMPATIBLTLY PROBLEM. DitsLosePath now worked in a cleaner way. It sends a messages back to the task itself which is treated as indicating the path has been lost. This ensures all transactions which may be outstanding on the path are tidied up correctly.

Add new routine DulLoadFacs which will load error facilities defined in the DRAMA_FACILITIES environment variable, as well as ensuring the standard DRAMA ones are loaded. This call is recommended for User interface programs to ensure they can translate all codes they might have to.

The DUL library now hass a version of the messana command, which supperseds the MESSGEN library version. This version loads all the standard DRAMA library facility talbes as well as those specified in DRAMA_FACILITIES. It outputs the actual message as well as the numerial parts of a message.

The UNIX DRAMA signal handler is now more consistent in it operation and therefore more likely to clean up correclty. It should now output an appropiate error code when a signal is received.


In order to improve access to the HTML pages, the Arg routines have been split from the Sds routines and the Dui and Sdp routines from the Dits routines. This makes access to all routine docuementation easier.

Fix some minor SDS id leaks in the monitor software

Revamp the internal debugging system, accessed by DitsSetDebug(). There are now a well defined set of flags for debugging various parts of the internals of Dits. In addition, the environment variable DITS_DEBUG is read at initialisation time and the debugging mask set to it's value if it is an integer.

Add new routines to assist debugging, DitsDumpPath, DitsDumpAllPaths, DitsDumpTransId and DitsDumpAllTransIds.

Add new control messages DUMPPATHS and DUMPTRANSIDS.


Various fixes to ADITS, the ADAM to DRAMA interface. Removes a cause of Crashes and a cause of going into an infinte loops.


The Dtcl module now checks for the existance of the various buffer size and logging variables before setting them such that when using the shareable library version, you can set these values before loading Dtcl.


Fix compilation problems in messgen.c, xditscmd.c and xdc*.c due to apparent include file differences on a JACH solaris machine. The problem with messgen.c was the prototype of getopt, which appears to be available when we compilete with -Xa instead -Xc. The problem with xditscmd.c and xdc*.c is that we were picking up a stange definition of NULL (possibly char * instead of void *) and this was causing compilation errors. Have removed all uses of NULL from these modules.


DcppMonitor object now have new functions IsInitial(), IsStarting() and IsActive() which can be used to determine the state of the object. In addtion, the state is check more often throughout the implementation.


Changes to DTCL to support Tcl version 8.0 had broken support for version 7.4 and before. This has not been fixed and Dtcl has been tested with Tcl version 7.4


DRAMA V1.1.1 Release

Some IMP Bug fixes and adding of RGO's change to the DTCL SDS Image widget which improves the scaling of images (currently USHORT types only)

Fixes to IMP are
  • Fixed problem in the IMP VxWorks task loading routines which caused names starting with numbers to be interpreted as numbers. This fixes the problem of the "imppulse" program crashing if a numeric dot format (e.g 123.456.789.012) was used to specify the machine to pulse.
  • Problems with fifo protections were probably not a umask() problem at all, but because cleanup -l (or showimp) was changing the protections of the fifo files! (And was using 0x744 instead of 0744, hence the really silly protections we got.) Cleanup now uses stat() to determine ownership, instead of the lash-up involving file protections it was using
  • Enhancement. Change to ImpRegister so that when a task registers it checks the user noticeboard for any tasks registered as being on the local machine but which do not in fact exist. It now cleans up (calls ImpTidyAfter()) for any such tasks. This will tidy up in particular after tasks that were not loaded by Master and which have not exited cleanly - although it doesn't happen until a new IMP task runs; it might be nice to have this sort of check run periodically, perhaps by Master itself.


A connect to a remote machine which is not responding at all, for example, a VME crate which had the ethernet cable disconnected, would cause transmitter to hang until the TCP/IP timeout occured (about 200 sec). Transmitter has now been modified to allow connections to other machines to continue operating (the connection to the disconnected machine still hangs, this is determined by TCP/IP)


DRAMA V1.1 Release

Changes made during a trip by KS and TJF to RGO.

  • Added a new message code, DITS__NO_NET_ON_REMOTE. This generally replaces occurances of IMP__SOCK_FAIL and gives a more appropiate error.
  • The VxWorks version of the DRAMA exit handler now checks for more errors, such as semaphore failures. In addition, a problem which could see task switching occuring at the wrong time was corrected.
  • Various debugging messages were removed as the situations were shown to be normal occurances
  • Documentation errors in the routine DuiExecuteCmd and Tcl commands Translate/pget/pset/obey/kick/monitor/control where corrected
  • In previous versions, a get path timeout in DuiExecuteCmd could cause a core dump if the path was not found. This bug has been removed.
  • IMP Event logging is now switched off by default. This can be switched on by setting the environement variable IMP_NET_LOG_EVENTS (to any value) before starting any tasks
  • If a task disconnected while receiving a large message from another machine, receiver was able to get the disconnect message in the middle of the series of reads from the socket. Receiver would then detach the shared memory and later try to read into it again. The error that occurred caused receiver to then mistakenly closed the socket and as a result, the location of the remote task was lost. This bug has been fixed.
  • IF a task loads and tries to register with the name of a task that had been registered but crashed, it now notifies all the tasks that were connected to the original task that the original task has disappered.


DRAMA V1.0 Release


The impprobe command has been modified to improve it's display when large numbers of tasks and connections/buffers are involved. It now only run on Tk 4.0 and above.

Incorporated Imp update which fixes various problems. Problem of not being able to clenup receiver under some condition has been fix. This has required that programs started by ImpMaster not be allowed to read from stdin. They will get an error condition if they try. The message corruption problem has been fixed (was only seen when networking was being really worked hard). Some problems in flow control have been fixed (as a one in several hundred thousand events problem, this was not see in practice).


Fix a bug in the request notify code which was causing notifications to be delivered in the reverse of the desired order. This has been fixed.

Support long parameter names in Set messages by use of additions to the argument structure and the special parameter name _LONG_. Added new routines DitsSetParamSetup() and DitsSetParamTidy(). These are used by DitsSetParam to set up these long parameter name argument structures. Modified ditscmd/xditscmd/dtcl to support long parameter names in both GET and SET messages.


The DITS__NOTIFYWAIT status has been split into several codes. The original code will now only be returns when your task is initiating messages (obey's, kick' etc) in other tasks. The following codes may now be returned DITS__NOTIFYWAIT_TAP, to indicate a general failure sending a message to a parent action (should not be returned as it should be converted to one of the others).

DITS__NOTIFYWAIT_MSG will be returned if MsgOut() got a notify wait condition.

DITS__NOTIFYWAIT_ERS will be returned if ErsFlush() got a notify wait condition.

DITS__NOTIFYWAIT_TRIG will be returned if DitsTrigger() got a notify wait condition.


Add DitsAltInDelete. Revamp DitsAltIn routines to allow more fd's and handle multiple invocations with the same fd.


Don't output messages about unexpected load message unless debugging. These are normally refering to things started by something else in the program.


Add IMP-E-SEM_FAIL to the list of imp errors we don't report during the shutdown process.


Add support in DcppTask class for initiation of an object which will contain a path to our own task, without having to explictly handle a GetPath operation


If the parent task of an action dies, then the action is marked such that is will never send a message to the parent task again.

Add DitsDumpImp() and dumpana. The former routine allows a DRAMA task to log all DRAMA messages. The later is a simple program to analyze the dump.


SdsNew was not returning immediately on bad status. This was causing a core dump in DRAMA when you attempted to get a non-existent parameter.


Don't output debugging messages when we see disonnection messages from unknown tasks.


DRAMA V1.0, Beta 2. Sent to RGO for testing.

DRAMA works around a problem which occurs when a task dies (kill -9 style) on a Unix machine without having been the child of IMP_MASTER. When a new connection is seen from the same task and the task id/machine are different, DRAMA does a path lost operation on the original path.


Fixes to IMP level to fix leak of Semaphores.

Dits now ensures Sdp parameter system is tidied up.


Release of V1.0 to site.

Various fixes to IMP Level restart and resource leak problems.


Add the new control message type of "DEBUG". It can be used to enable DRAMA debugging. Any argument is converted to an integer and supplied to the routine DitsSetDebug(). If no argument is supplied, call DitsSetDebug with an argument of 1 (normal debug enable call).

If the debug flag is greater then 1, then dump the imp message details assocaited with a system message.


Correctly handle the case where, when task A is setting up a connection to task B, the connection fails because task A does not have sufficent space. The message back to task B was not being handled correctly due to Dits and Imp level problems. (Still have underlying IMP problem)


C++ A code now compiles with the Solaris V4.0 C++ compiler.

If the network tasks are shutdown, we now correctly tell each task communicating with them on the same machine about this, previously, messages received had the wrong task names.


Fix DulFindFile problem - was crashing when translating evnironment variables with long translation and was not ignoring directories with did not exist as Vms Find File does.


Improve the error message when we have a failure in the call to ImpConnect, in Dits___ImpLocated.

If we get a SendError whilst setting up the path, was clobbering the path mode before reporting the message and the message didn't make sense.

Add DitsSetDebug command to dtcl.


Fix problems in handling of Disconnection messages. This involved improvements in Dits and fixes to Imp. In particular, Dits disconnect handlers will now always have a valid task name. The Imp changes ensure we tidy up correctly after a remove machine has gone done.

Update documentation to include See Also: lists in Dits, Dul and Dtcl libraries. General documentation update.


Add new Sds utility routine SdsTypeToStr which when given a valid Sds type code will return an appropiate string.

Add ArgSdsList, a routine which does a similar job to SdsList, but allows you to specify an output routine. (Also add a new static List function to the Arg C++ class which calls this).

ArgCvt will now accept a new destination type, ARG_STRING2. This behaves like ARG_STRING in call cases except where the source is a float/double. In that case, it uses 6/10 digits or precision instead of the maximum amount available, as used by ARG_STRING.

ArgToString will now handle Array items.

Add DuiLogEntry function, which does a similar job to DitsPrintReason, i.e., outputs details of an entry to an action. Unlike DitsPrintReason, it always uses MsgOut, and will print Sds arguments.

DuiExecute now uses ArgSdsList to list sds structures such that sds structures are now listed using MsgOut instead of to stderr.

Added -printcmd option to Dtcl's SdsList command to take advantage of the new ArgSdsList function within Dtcl.

Add SdpCreate, SdpGet, SdpPut, SdpGetSds and DitsGetParId to DTCL. This allows creation and use of parameter systems.


Add the -varcvtcmd argument to the DTCL's monitor command. This allows you to do conversions on the fly in conjunction with the -variable option.


DTCL's ErsHandler command now appends flags when calling the handler routine which indicate the Ers message flags (bell, alaram, highlight).


DitsPathGet/DitsGetPath will now reschedule if the path is available immediately or we are already waiting for a path. This reduces the complexity in the use of these calls. Flags to DitsPathGet and DitsAppInit (the later for DitsGetPath) will enable the old style of operation. Inquiry function mode of DitsPathGet/DitsGetPath now formalized.

DitsLosePath now does not delete transactions assocaited with GetPath messages.

Can now get and set parameters using structured parameter names, as supported by the SdsFindByPath call. Note, name length limitations in DRAMA messages (20 characters) prevents you doing much which these, although MGET mesages do not have such restrictions. DTCL pget command supports this by using MGET messages auotmatically when the name is long.


DTCL, monitor command now supports -variable option. Allows monitor messages to cause variables to be updated automatically. SdsArrayGet supports -element option.

Parameter Monitoring. Support only sending current value to task which added that parameter to a transaction (send SEND_CUR flag is set).

When a transaction's parent is a UFACE transaction in the same task, invoke routine directly instead of sending a message. This should allow user interface tasks to monitor there own parameters very efficently.


ADITS (Adam/Dits interface) now handles MGET messages.


Version 1.0 Beta CD rom.


The default DRAMA Imake macro to build a program (DramaProgramTarget) now references the DUL and GIT libraries, as does the default include file macros.

Under VxWorks, we now release a libdul.o and libgit.o and use these to build libdrama.o, which is currently found in $GIT_LIB. This library should be loaded into VxWorks to make the entire DRAMA system available.


We can now build a Dtcl shared library for dynamic loading into wish/tclsh. Consider adding the following to your Tcl pkgIndex.tcl file

If DRAMA gets a corrupted messages, it will not retry a number of times (currently fixed to 10). Future versions will add more control to this.

package ifneeded Dtcl 1.0 {
                global env
                if {[lsearch -exact [array names env] DTCL_DEV] != -1} {
                    load $env(DTCL_DEV)/libdtcl.so
                } else {
                    error "DTCL_DEV environment varaibler not defined, have you
started up drama"

This will enable the commands package require Dtcl


Change DitsAppInit flag DITS_M_FC_AC to DITS_M_NO_FC_AC as default mode of operation has changed. Notification now works correctly with monitors and return of action completion messages.

Add SharedLibrary macro support to dmakefile's


Fix DTCl/DTK prompting problems under VMS.


Add DitsPutPathData/DitsGetPathData.

Integrate Imp V1.2


continued configuration revamp. Standard configuration files now are appropiate for standard machine configuratons. Must use local_config.cf files to adapt for each AAO machine.

Added logging support to DcppTask.

Add MGet routine to DcppTask.

xditscmd transparently uses the MGET message when you try to get mutiple parameter values.

The dtcl program now accepts the option -nostdin, which says that it should not prompt from stdin for commands.

The dtk program now accepts the option -stdin which says that it should always prompt for commands from stdin (by default, it does this only if a script is not supplied with the -t option)

Fixed bug in DulFindFile which had caused it to crash under VxWorks when a file did not exist.


Add DitsArgNoDel function which allows Sds structures supplied by DitsSignal calls to be left alone by DRAMA

Revamp of configuration stuff particually in relation to compling VxWorks code on a Solaris machine. VxWorks configuration is now set in the local_config.cf file.

Support VxWorks mips target using information from Alan Bridger.

Don't build strtoul into sds except on SunOs machines.


Added a new routine, DitsAppParamSys used for putting and inquring about the parameter system, including the monitor routines.

DitsPutParsys and DitsPutParamMon are now obsolute.

DitsGetParId now returns void * instead of SdsIdType.

We now support a new message type, the MGET message, which can be used to return the values of multiple parameters.

When build VxWorks, dependices for libdits.o are now include all DRAMA libraries it is dependent on.


Added new programs sdsdump and sdspoke. dui (Dits user interface routines) report messages on failures of handlers (could result in more mesages from Dtcl stuff for example). Bug remove from ErsRep calls during interrupts (Vxworks)


Beta 0.6 release for JACH.


ADITS now uses ADAM net 4 instead of ADAM net 3. This means you have to use the form


instead of


from adam programs. This is as it conflicts with the use of adam net 3 by JCMT.

In addition, you can now use a node name of "LOCAL" or "LOCALHOST" to refer to a task on the machine on which ADITS is running.


DcppHandler Dcppobject now allows you to wait for multiple threads to complete.

SDSC support of Sds structure arrays now complete (have not tested geneation on the fly)

New Sds routines - SdsInsertCell, inserts a cell into a structured array. SdsFillArray fills a structured array with copies of a specified structure.

SdsInsertCell and SdsCell now allow you to treat multidimensional arrays as one dimensional.


VMS DRAMA handles lack of ADITS sliently.


Sds memory leaks fixed.


SDSC now supports types INT32/UINT32/INT64/UINT64 directly. (Some work towards Sds structures, but does not work yet due to Sds problems).


Add DitsActionWait command to Dtcl.

dits_netclose now works quickly (tested undr Unix only)

cleanup command now only clean's up scratch files for the current host.


Fix a number of problems in the DitsActionWait/DulGetPathW/DulLoadW stuff.

Interfaces to DulLoadW and DulGetPathW changes to incorporate use of DitsPathGet instead of DitsGetPath.


Many of the DitsPut??Handler routines now return the original values. Where there was not client_data item, they simply return the value and no application change is required. Where there was a client_data item, there are now extra arguments to return both the old routine and client_data items.

DitsAppInit calling sequence has change and some new flags have been added.

DitsDisconnectRoutineType has changed to add a flags argument.

New DitsPathGet routine replaces DitsGetPath, adding new arguments and putting the buffer sizes in a structure. DitsGetPath remains but is implemented in terms of DitsPathGet.

DitsPutActions argument structure has changed to provide a action cleanup routine. This is invoked when the task is shutdown or in the case of spawnable actions, when spawed actions complete.

Add DitsPutCode routine.

Improved error reporting when buffer allocation problems occur but only when local tasks are involved. Currently, buffer allocation problems involving remote tasks cause system errors due to bugs in Imp.

DitsGetEntInfo/DitsGetEntName now returns the name of the subsidary action when the reschedule reason involves such a transaction.

A new DITS_M_REP_MON_LOSS flag to DitsInitiateMessage which tell the monitor system to report monitors lost due to waiting for buffer empty notifications.


Reply messages now try much harder to get though, using the RequestNotify mechanisum. (MsgOut stuff does not, ErsOut does not it is not clear that it should)

Tidy up VMS link procedures and options files.

You now cannot set a structure Sdp parameter. A new routine SdpSetReadonly now allows you to make a parameter system readonly. There are not SDP_type codes to replace the use of SDS_type and ARG_type codes. DitsPutParSys is now does as part of SdpInit.


A host of new commands added to Dtcl. In addition to DitsScanTask/DitsTaskIsLocal/DitsSetDetails we added various commands to support adding to actions using Tcl and implemented in Tcl. Some new C level functions were also added.


Add DitsTaskIsLocal routine to Dits Added DitsTaskIsLocal/DitsScanTask/DitsSetDetails to Dtcl.


Dits and Dul now use DitsMalloc/DitsFree to malloc and free memory. By default these are macros defined to malloc/free. You cann recompile both these with these redefined to user defined fuctions to test for memory leakage.

We now provide dul_cc/dul_link/dtcl_cc/dtcl_link to help in the building of programs. (dtcl stuff does not actually include Tcl since these routines don't know where it is)

Solaris link lines now specify -R to enable finding of sharables at runtime (configuration files only)


Version 0.5


SdsFindByPath added to Dtcl/Dtk.


Messgen now generates a fac__FACNUM code in include files.


Added new function SdsFindByPath. Added commands SdsListPath.

Configuration stuff now supported DNOFIX_INCLUDES macro. At AAO this is set up in ~drama/local/drama_local.cf. Also modified ~drama/local/drama_local.cf and drama_local.opts to support determination that AAOSSC does has not has fix includes run and does not support C++. DRAMA core stuff using C++ (git/dul) now output warnings if build without C++ stuff.


If a kick message has no transaction id, use the path to the initiator of the obey for Informational/Error/Trigger messages.


Provide an SdpPutStruct call, similar to SdsPutSds but allows Structures to be put into structured parameters.

Imp V1.0 incorporated.

Add new flag DITS_M_NOEXHAND to DitsAppInit/DitsInit which allows the caller to disable the use of the Dits default exit handler.


Recent changes compile cleanly under solaris and alpha.


Dits document updated.


Allow spawnable actions (using DitsPutActions). Add DitsGetActIndex, DitsKillByName, DitsKillByIndex, DitsSignalByName and DitsSignalByIndex. DitsKill and DitsSignal are withdrawn (marcos defined to call KillbyName and SignalByName).

Add DitsSpawnKickArg

Added DitsSignal and DitsKill to Dtcl. Add -kickarg option to obey command.


Configuration file local config files. Notes as per below config document updated.


DtclBackgroundError correctly handles being called when no error has occured by reporting the problem.


Type of DitsAltInType changed and inclusion of system include file sys/types.h (unix), selectLib.h (VxWorks) removed from DitsSystem (and therefore DitsSys) as a result.

Version 30Nov, perlimary release of Drama 0.5


Added routines DulMessageW, DulGetPathW and DulLoadW, which make use of DitsActionWait/DitsUfaceWait to allow simple blocking style messages.


DitsAltIn* stuff now used DitsPutEventWaitRoutine.


Added DitsActionWait and DitsUfaceWait* and DitsPutEventWaitRoutine.

Unix version now makes use of the technique designed by Brian McIlwrath (RAL) to ensure exit() is invoked when signals occurs, as well as ensuring you get the standard response when the signal is recevied (core dump if appropriate, correct error message).


Problem with DitsLoad comments are being lost from man pages fixed.

Add optinal OFFSETS item to ImageStructure definition.

Added DitsScanTasks call.


More revamping Dcpp. New documentation of C++ interface. SdsId used throughout instead of Arg.


Revamp Dcpp stuff. SdsId C++ class now declared in Sds.h and Arg C++ class is now based on it.


Created release r0.4.2

Ensure Imp fixes reflected in DRAMA copy of Imp code.


Fix but in Dui stuff where success handler would be called if error handler not supplied, regardless of the status code.


Version 28-Aug ???


Version 14aug created. Above changes/Tk 4.0 built for sunos and VxWorks.

SdsReadFree Added


New routines ArgGeti64/ArgGetu64/ArgPuti64/ArgPutu64 SdpGeti64/SdpGetu64/SdpPuti64/SdpPutu64

Dtcl - Add new routine DtclErsRep. Fixed reporting of errors when Tcl scripts are read such that we get full stack dump of error. In addition, DTCL_COMMAND will also return the stack dump of any error.

Dits - Fixed bug where arguments passed using DitsSignal are not deleted.


Start of changes list

ArgCvt now handles 64bit integers correctly. (Note - side-effect, when calling SdpCreate, items of type SDS_INT/SDS_UINT must use type INT32/UINT32 while SDS_I65/SDS_UI64 must use types INT64/UINT64)

Dtcl now supports Tk 4.0. A new Tk photo image type supports Sds images. Dul library provides an addition photo image type which supports Fits images.

Click here for the DRAMA home page and here for the AAO home page.

 For more information, contact tjf@aao.gov.au