New Modules
Modifications/ Bug Fixes to Existing Modules
Changes To Configuration Files And Descriptor Files
Known Bugs
Known Deficiencies
Release Notes: Earthworm Version "working" Cleaned out after release of v7.0 on 6/15/2006 This release is EW V7.1 and has all of 7.0 SCNL upgrades. EW v7.1 released on April 5, 2007 NEW MODULES: *********** Added data_exchange/pickwasher, a prerequisite for glass. Source from Hydra project, tested and documented by Mitch, committed and makefiles cleaned up by Stefan. Makefiles for Solaris and Windows only at this point. Stefan Lisowski 20070403 Created a 'params' directory at the root level of Earthworm containing the .d and .desc files for all modules. Each release of earthworm will require updating these files from the .src tree. Stefan Lisowski 200704 Added in MAC OS X flags to compile on Intel and PPC chip sets. This works for all my test modules except, you guessed it, hyp2000_mgr which doesn't compile because of GNU g77 or gfortran issues. One thing you must do for Mac OS X is to increase the shared memory segments by adding in a /etc/sysctl.conf with these settings: kern.sysv.shmmax=16777216 kern.sysv.shmmin=1 kern.sysv.shmmni=32 kern.sysv.shmseg=16 kern.sysv.shmall=4096 To find out the default settings type this: sysctl -a | grep shm This work was done jointly by: Paul Friberg ISTI and Rae Yip (Caltech) 2007/03/28 Added psn4putaway for PSN4 format to libsrc/util for windows only, and added it to docs, trig2disk and waveman2disk .d files and makefile.nt's. Paul Friberg 2007/03/05 Added ws2ew and psnadsend for windows for webtronics digitzers. These 2 modules were put in data_sources. Paul Friberg 2007/03/04 tankplayer_tools/ms2tb - miniSEED to tracebuf converter for playing back miniSEED format time-series. Paul Friberg 2006/08/08 condense_logo - Reads messages from a list of logos from one transport ring and writes them to another ring using its own installation and module id in the logo. Menlo Park contribution. (included/tested by Stefan 2006/11/22) MODIFICATIONS/BUG FIXES TO EXISTING MODULES: ******************************************** q3302ew - new version based on lib330! This one is a vast improvement over the one based on Mountainair. Hal Schechner 2007/04/04 startstop - all flavors, modified MAX_CHILD to 200 (was set to 100, probably to limit process usage or memory usage by startstop in the early days). Paul Friberg 2007/04/03 localmag - 2.1.1 INGV contributed a feature to write EVENT files in SHAKEMAP XML format to the SAC output directory. This optional feature is only usable when you also use the saveTrace option. Contributed by Matteo Quintiliani and Marco Oliveri of INGV. Integrated in with current version by Paul Friberg 2007/03/29 diagnostic_tools/sniffwave Earthworm Class March 2007, added statistics flag to sniffwave y, n, or s options are now handled, tport function changed 2007/03/23 Many warnings under windows with MS 2005 compiler were fixed relating to time related variables using long instead of time_t. This had segmentation violations under some programs so we decided to fix all of the warnings. Here is the list: tankplayer, wave_serverV,condenselogo, ringdup, ws_clientIIx.h, file2ew, ringtocoax and II, config_ws, gaplist, arc2trig, localmag, gmew, pkfilter, statrigfilter Paul Friberg 2007/02/23 archiving/trig2disk archiving/waveman2disk Solaris only Added Richard Luckett's support for writing miniseed format. This added Chad Trabant's libmseed to libsrc/util. Note an older version of this library is hiding in data_exchange/slink2ew/libslink as well. New stuff didn't seem to be directly backward compatible. At some point this shoudl be reconciled so we only have one libmseed!! Stefan Lisowski 2002/02/20 diagnostic_tools/template - fixed a longstanding bug in template where long was used as the time type instead of time_t. Paul Friberg 2007/02/20 lockfile_ew.c and lockfile.c added to libsrc for file locking for earthworm. See the lockfile.h in the include directory for the function declarations. Also, see the updated diagnostic_tools/template.c for an example of its use. The intent is to use this for startstop which should NEVER have more than one instance running per startstop_*.d file! This lockfile implementation works for both Windows, Linux, and Solaris (tested on each) Paul Friberg 2007/02/20 data_sources/scream2ew scream2ew - the first call to logit_init needs to have 1 as 4th argument not the undefined config.writelog, otherwise the second call doesn't work. Richard Luckett committed to CVS by stefan 2007/02/19 archiving/wave_serverV Linux patch The following patch is for wave_serverV.c to enable it to be compiled under linux (specifically gcc 3.3.6 doesn't seem to recognise the "#else if defined(...)" construct properly, at least with the default CFLAGS. Matthew van de Werken committed to CVS by stefan 2007/02/19 seismic_processing/fir I believe I have discovered a bug in earthworm 7.0. It seems there is now a 2-byte field called version in the trace header. This is never set up in the fir module, so that it outputs packets to the transport ring with no valid information in this field. I noticed this when I set up a carlstatrig module which kept crashing when being fed with data from fir - carlstatrig checks the trace header for a valid version. I solved the problem by adding the lines outHead->version[0] = TRACE2_VERSION0; outHead->version[1] = TRACE2_VERSION1; to firfilt.c at the point where data is being copied into the outgoing packet. David Scott. 2006/9/22 (commited to CVS 2006/12/30 stefan) archiving/tankplayer_tools data_exchange/liss data_sources/scream2ew linux makefile fixes per david J Scott 20060720 (commited to CVS 2006/12/30 stefan) libsrc/qlib2 - an old (10 year) version of qlib2 was in data_sources/q2ew We now place qlib2 in libsrc. I populated directory libsrc/qlib2 with the qlib2 from qlib2.tar.2006.313.gz downloaded from http://www.ncedc.org/qug/software/ucb/ and commited the src code to CVS Ilya Dricker 2006/11/16 evanstrig Fix for linux compilation. Laurence Withers, GSL 2006/10/23 carlstatrig Michelle Kline of Utah added in STAtime as a configurable value (was statically set to 1 in the C code). This configuration is backward compatible to the old version and is an optional parameter. Michelle kindly updated the documentation too. committed to CVS 2006/10/20 Paul Friberg trig2disk Michael Lofgren of CSIRO fixed a log message bug. commited to CVS 2006/10/18 Paul Friberg gaplist: Changed gap- binning boundaries from 1.0 to 1.1 sec so that gaps from 1 second timing errors will show up in a different bin from gaps caused by 1 missed packet (for most digital dataloggers). 2007/01/10 Lynn Dietz hyp2000: I grabbed Fred Klein's newest version of hypoinverse where he added the processing domain and version feature. The new command is: VER 'NC' '01' / Processing domain and version Hypoinverse puts these two 2-character strings to the end of summary cards and at the top of print files. These six source files were changed: common.inc hycmd.for hysum.for hystl.for hyp.for hybda.for committed to CVS 2006/10/30 Lynn Dietz PS: someone needs to change hystl.fpp for Linux!! Incorporated Fred Klein's 11/09/2006 version of hyp2000 in which he changed the magnitude weight calculation from the sum of weights (float) to the count (int) of weighted station magnitudes. Committed to CVS 2007/1/4 Lynn Dietz Incorporated Fred Klein's 2/2007 version 1.1 of hyp2000. In this version Fred added the option to fix origin time (changes to common.inc, hyloc.for, hyp.for, hyphs.for) and did some minor tweaks to make the g77 compiler happy (changes to hydelt.f, hyedit.f, hyinp.for, hystl.for). I also removed a bunch of source files and .com files which are not used in either hyp2000 or hyp2000_mgr under Earthworm. Committed to CVS 2007/03/02 Lynn Dietz Incorporated Fred Klein's 3/21/2007 bug fixes. Minor logic changes in hyphs.for and hyloc.for related to fixing origin time or depth (which can now be fixed at 0.0). The program now does what the documentation says it will. Committed to CVS 2007/03/23 Lynn Dietz hyp2000_mgr - windows issue The ew7.0 version of this for windows did not work properly due to a bad pass by value in the link to the fortran code. Fixed 2006/10/16 Paul Friberg arc2trig David Scott of the BGS upgrade this to be SCNL compliant. Thanks! commited to CVS 2006/10/13 Paul Friberg startstop_unix_generic.c Removed an fprint() from EncodeStatus() which was causing a partially completed EW status message to go to stderr after info from each child process was added to the status. I think this was a debugging leftover. Lynn Dietz 2006/09/22 gcf2ew Modified for TYPE_GCFSOH_PACKET output of SOH packets for SNW monitoring of state of health packets from guralps DM24. Same for scream2ew Paul Friberg, 2006/09/01 Modified to correctly put in the TRACEBUF2 version member values Paul Friberg, 2006/11/08 q2ew Modified to correctly put in the TRACEBUF2 version member values Ported to and tested on Linux (added makefile.ux support) Ilya Dricker, 2006/11/21 scream2ew Modified for TYPE_GCFSOH_PACKET output of SOH packets. Paul Friberg, 2006/09/01 Laurence Withers, GSL 2006/10/23 provided linux compilation fix grab_bag/pick_recorder - made it SCNL compliant and added the app to the documentation. Paul Friberg 2006/09/01 tankplayer_tools/sac2tb - fixed a minor bug in the TRACE2_HEADER that overwrote the version element of the trace header. This bug caused tankplayer to barf. Paul Friberg 2006/08/08 heli_ewII -- heli_ewII.h samp_sec now a float instead of a long to accommodate sample rates less than 1 Hz Stefan Lisowski 20060726 scn2scnl -- to_trace_scnl.c/ scn_convert.c I've fixed scn2scnl so that it will truncate invalid-length SCNL strings and prevent strings from overrunning their bounds. I've attached the files that were changed. Both of them live in src\data_exchange\scn_convert. to_trace_scnl.c contains the fix. The function to_trace_scnl() will now force the last character of each SCNL buffer to be null. This is needed because strncpy will not append a null character if the source string used during copies is as long or longer than the number of characters to count. scn_convert.c has a minor fix where some local variables in s2s_com() were declared twice. I removed the redundant declaration to prevent any future headaches. Mark Morrison Mon, 26 Jun 2006 15:57:19 -0600 (MDT) sniffwave -- sniffwave.c additional significant digits for sample rates < 1hz Stefan Lisowski 20060726 tankplayer -- tankplayer.c SendLate command in tankplayer.d did not appear to be working. The problem is that while tankplayer will play back 3 waveform types (TypeADBuf, TypeTraceBuf, TypeTraceBuf2) it would only set the time if the type was one of the first two. Should now work for TraceBuf2 as well. John Patton (Tested, compiled and added to CVS by Stefan 20060630) wave_serverV -- wave_serverV.c The problem was that the size of the tankfile is not an integer multiple of the packet size and so occasionally there is a mess up at the end of the file (mine were 3 in this example). The result was that the data requested from the server was not returned and an event file failed to be written. [Fix was to add an else to wave_serverV_config] Richard R Luckett, BGS (Tested, compiled and added to CVS by Stefan 20060711) Laurence Withers, GSL provided a fix for linux 10/23/2006 Signals were not being handled at all under linux (which caused SIGPIPE signals to take down the server). I changed some ifdefs around so that the solaris signal handling is compiled in under linux as well. Hal Schechner Modified behavior so that client socket-disconnects between requests are no longer recorded/logged as socket-errors, even when the server thinks the socket was not closed cleanly. This should get rid of messages like: >>>> 20060210_UTC_08:51:22 Wave_serverV:ListenForMsg: Bad socket read. iReadResult = -1 which cause people to think an error has occurred. Updated server_thread.c timestamp. David Kragness 2006/10/09 ws_clientIIoc / ws_clientII.h Upped the max menu str len (as defined by wsREPLEN) so that it is large enough to handle a 5000+ SCNL menu from a single wave_server. Downside is that it must temporarily allocate 400kb instead of 80kb when parsing a menu. This seemed like a reasonable tradeoff. Added protection against oversized SCNL fields in wave server menus: increased the size of the buffers used to capture SCNL values from the menu, in order to reduce the chance of clobbering memory if a channel with SCNL longer than the spec'd tracebuf2 sizes is found in a menu. Fixed a bug where wsGetTraceAsciiL() was returning WS_ERR_NONE even though there was a warning flag (with a WS_WRN_FLAGGED) return code from wsParseAsciiHeaderReplyL(). Added a work around for handling flagged wave_server returns where the datatype does not get properly filled in. DK 061906 eqcoda: Modified to read per-channel parameters from more than one "StaFile". Final station list is sorted after all station files are input. Lynn Dietz 2006/09/20 Modified to ignore channels in the "StaFile" whose pick flags are set to 0. Previously, those lines ended up in total count of channels. Lynn Dietz 2007/01/09 pick_ew: Modified to be able to process multiple "StaFile" commands for setting per-channel picking parameters. Lynn Dietz 2006/09/20 Changed name of index file to pick_ew_XXX.ndx where XXX is the moduleid of the current instance of pick_ew. This allows multiple instances of pick_ew to run on the same computer without competing for the same index file. Lynn Dietz 2006/11/16 wave_viewer: Modified to accept sample rates >= 1000hz. David Kragness 2006/10/09 Modified format of left-hand column so that channel naming and other information is more compact. David Kragness 2006/10/26 sniffwave: Now if you give station, channel, network and location codes on command line, sniffwave will sniff only for TYPE_TRACEBUF2 and TYPE_TRACE2_COMP_UA packets. Or if you give station, channel and network, then sniffwave will sniff only for TYPE_TRACEBUF or TYPE_TRACE_COMP_UA. This gives you more control over what sniffwave looks for. However, it means you can no long sniff for both TYPE_TRACEBUF and TYPE_TRACEBUF2 packets at the same time with a single instance of sniffwave. Pete Lombard 2006/12/28 scnl2scn: Now can perform complete mapping of SCNL names to SCN names, using configuration commands similar to those of scn2scnl. This is in place of the all-or-nothing approach of the previous scnl2scn. Pete Lombard 2006/12/28 scnl2scn: Fixed bug in scnl2scn.c: forgot to sort the explicit list. Added Debug option to log the configured mapping as well as logging how it maps (or not) each SCNL it sees. Very verbose, so run it with Debug on only as long as you need it. Pete Lombard 2007/01/17 naqsserTG: Incorporated Paul Whitmore's most recent code for processing tide gauge data from Nanometrics serial data streams. Paul added 5 new arguments to his "RequestChannel" command. See sample .d file for details. Lynn Dietz 2007/02/09 wftimefilter: Added a sanity check on number of samples in a packet. Packets with nsamp <= 0 are rejected. Modified samplerate comparison to allow for a bit of slop before declaring that a samplerate has "changed." This is to allow for the case where a datasource is reporting the actual sample rate instead of nominal sample rate. Re-worded the logic of the if() statements which limit the logging of bad packets and warnings. Lynn Dietz 2007/02/14 CHANGES TO CONFIGURATION FILES and DESCRIPTOR FILES:
**************************************************** **************************************************** scnl2scn: Now requires commands to specify the mapping from SCNL to SCN. The commands are very similar to those used by scn2scnl. See the comments in scnl2scn.d Pete Lombard 2006/12/28 scnl2scn: Added Debug option to log the configured mapping as well as logging how it maps (or not) each SCNL it sees. Very verbose, so run it with Debug on only as long as you need it. Pete Lombard 2007/01/17 KNOWN BUGS: *********** liss2ew: liss2ew has been observed intermittantly producing malformed TRACE_BUF messages. Currently the conditions for causing this problem are unknown. Due to this, liss2ew should be treated as suspect. Use at your own risk. JMP 6-18-2003 k2ew: k2ew uses the k2hdr.rwParms.misc.channel_bitmap parameter to decide which channels it will see as streams from the K2. This is actually the parameter which the K2 uses to decide which channels to record in an event file (see K2'scommand). The K2's is the parameter that shows which channels the K2 is streaming out. This is the parameter that k2ew should be using to decide what data it will see. The big problem is that none of the header files from Kinemetrics (nkwhdrs.h) seem to show this parameter anywhere. This issue is only a problem for those folks who want to record more channels on the K2 than they want to stream continuously. Terry Dye (Univ of Utah) discovered this problem when trying to stream only 3 channels of a 12 channel K2. LDD 4/11/2002 FIXED PNL, 6/9/03 wave_serverV: it occasionally sends the following error to statmgr: UTC_Thu Sep 06 03:30:14 2001 WSV1/wave_serverV_nano ReadBlockData failed for tank [z:\nano57.tnk], with offset[999908] and record size[64]! errno[0] Mail sent. The nominal tank size is 1 megabyte, and the actual tank size is 999908. It looks like waveserver is trying to read off the end of the tank. WMK 9/6/01 wave_serverV: appears not to reply to requests for a single sample of data. I noticed when testing wave_viewer, that if the start time and end time of a request were equal (in which case there should be one sample of data) then wave_serverV did not reply to the request (ASCII request) at all. No Data, No Flags, No Reply, No Nothing. It needs to issue a reply to every request. DavidK 09/25/01 wave_serverV: Wave server appears to be limited (on 32-bit systems) to 1GB tank sizes. A bug (a signed integer overflow of tmpoE at Line 1155 of serve_trace.c (LocateRoughOffset())) prevents data retrieval from the tank under certain conditions when the tank size exceeds 1 GB. DavidK & PNL 09/27/04 Automatic restarts of adsend (using the "restartMe" line in the descriptor file) can cause an NT system to hang. Therefore, you should never use the autorestart feature with adsend, but you should bring down the entire Earthworm system if adsend needs to be restarted. LDD 5/31/2000 Comments added to adsend.desc, but leave this warning here! libsrc/utils/site.c: The strings used for station, channel and network are required to be fixed length with trailing spaces added to short names. If the strings given to site_index do not have these trailing blanks, SCN names will not match. This is not documented anywhere. PNL 10/15/00 socket_ew: (libsrc/util/socket_ew_common.c libsrc/solaris/socket_ew.c libsrc/winnt/socket_ew.c include/socket_ew.h) Fixed a bug in the connect_ew function(). When run in non-blocking mode (clients connecting to a server - using a timeout value), there was a bug in the connection code(discovered on Solaris) that caused the function to return a timeout-error when there was any kind of error during connection. The bug was discovered when connecting to a non-existent socket. When trying to connect to a non-existent wave_server on a machine, the underlying socket library was returning a Connection-Refused error, but the socket_ew library was passing back a timeout error. - The change only applies when a socket-error occurs while the function is waiting for the connect to happen. The instance where you will most-likely see a difference, is when you try connecting to a non-existent socket. Previously the function would return TIMEOUT, now it will return connection REFUSED. - Added a new function: socketSetError_ew(), and defined a new socket_ew return code: CONNREFUSED_EW. DK 2003/02/04 sm_ew2ora: There is a bug in sm_ew2ora that involves having multipe time intervals for components and channels. If a strong motion message containing information for a channel that the DB has never seen before is loaded into the DB, and then later another message for the same channel with an earlier timestamp is loaded, the load of the second message will fail, due to problems with overlapping time intervals, and the call that sm_ew2ora uses to create those time intervals. This problem only affects stations that were not previously loaded via one of the station loader programs stalist*2ora, and only when receiving SM data that is timestamped with a time that is prior to the original time for that channel. The bug lies in the logic of ewdb_api_PutSMMessage(), and not in the underlying code. Davidk 05/25/01 A change was made to ewdb_api_PutSMMessage() that dramatically affects sm_ew2ora. Please see the note about that function. Davidk 2001/07/26 ewdb_api_CreateWaveform() (ewdb_internal_CreateSnippet.c ewdb_internal_CreateWaveformDesc.c) Added a call to release the cursors used by the internal functions, when they fail. Fixes a bug which resulted in a DB cursor leak when a call to stuff a snippet into the DB failed. DK 2003/02/04 logit.c: 1) Added a new function logit_core() int logit_core( char *flag, char *format, va_list ap); This function is the same as logit(), except that it takes a va_list argument for the variable length parameter instead of '...', and it has an int return value. This function can be called by other functions that receive a '...' variable argument list, where as logit() cannot. logit_core() is to logit() what vsprintf() is to sprintf(). - 2) Moved all of the functionality in logit() to logit_core(), and modify logit to call logit_core(). - 3) Added a new function get_prog_name2(), as an intended replacement of get_prog_name(). get_prog_name2() includes an additional parameter (the buffer length of the output buffer). - 4) Modified logit_init() to use get_prog_name2() instead of get_prog_name() - All four(4) of these changes should be backwards compatible with all existing earthworm code, and the modified logit.c has already been tested with several earthworm modules. - ewdb_api: Added new function ewdb_api_GetEventSummaryInfo() to retrieve summary information for an event(including the preferred szSource and szSourceEventID of the event). 011904 DK KNOWN DEFICIENCIES: ******************* k2ew: Kinemetrics control software has been modified to configure location codes inside the K2 itself (in previously unused space). k2ew has not yet been modified to read these location codes from the K2 header. For the time-being, location codes must be set with the "LocationNames" command in the config file. Lynn Dietz 2007/02/09 ringtocoax: In Windows NT, the time resolution of sleep_ew() is about 16 msec (one clock tick). On Solaris, the resolution is about 10 msec. This is a problem for ringtocoax, since packet delays need to be set to a few milliseconds. statmgr: A space is needed between "tsec:" and the value. If it isn't there, things fail. Artifcat of the kom routines. (Alex) threads functions: The KillThread function on WindowsNT and Solaris terminate the thread without ensuring that no mutexes are held. If a thread holds a mutex when it dies, no other thread can get that mutex. PNL 1/12/2000 carlsubtrig: The system time must be set to GMT and ew_nt.cmd must have TZ=GMT for carlsubtrig to work. Comments in ew_nt.cmd done 5/25/00. Barbara localmag: needs GMT set on the system ew2seisvole: on NT, exits with horrible crash when system is stopped. NUMBER OF RINGS LIMITED ON SOLARIS: Under Solaris 2.6 (and probably other versions as well), the maximum number of shared memory segments is six. This means that on an out-of-the-box machine you can only configure six rings. If you try to configure more than that, you will see a cryptic message from tport_create about too many open files. The fix to this problem is to add the following lines to the /etc/system file, and then reboot the system. set shmsys:shminfo_shmmax = 4294967295 set shmsys:shminfo_shmmin = 1 set shmsys:shminfo_shmmni = 100 set shmsys:shminfo_shmseg = 20 set semsys:seminfo_semmns = 200 set semsys:seminfo_semmni = 70 This allows for 20 rings. Lucky Vidmar (7/6/2000) startstop_solaris: Fixed bug in call to logit_init(). The program was printing error messages: Invalid arguments passed in. Call to get_prog_name failed. WARNING: Call logit_init before logit. startstop_solaris: There MAY be a problem with the signal that startstop sends to modules during the shutdown sequence. The shutdown sequence is started (after typing "quit" to startstop or running "pau") by startstop placing a terminate message on all transport rings. Modules should see this message and start their own shutdown. After a configurable delay, startstop checks to see that all modules have exitted. Any that are still running are sent a signal to terminate them. Currently that signal is SIG_TERM. But since wave_serverV has a handler for SIG_TERM, wave_serverV sees that as essentially the same as a terminate message. So if wave_serverV is having problems completing its shutdown, SIG_TERM won't do anything. The result is that startstop may give up and exit, leaving wave_serverV running. If that happens, the operator will have to terminate wave_serverV by doing "kill -9 ". That may leave shared memory and semaphores stranded in the kernel: run the command "ipcs -a" to see. If necessary, the stranded shared memory and semaphores may be cleaned up with the ipcrc command; must be run as root; see the man page. This problem only exists on Solaris/Unix, not on WindowsNT. PNL, 10/4/2000 libsrc/utils/kom.c: fix comment in k_open() The comment above k_open() says that only one file can be open at a time. Yet the Kbuf array has slots for MAXBUF (currently 4) open files. Does this work, or is the comment to be taken at it's word? PNL 10/15/00 libsrc/utils/logit.c: logit_init() requires a module_id number, which it uses to construct the log file name. This is not helpful, since the module_id number is not meaningful to people. Worse, it requires that the config file be read and earthworm.d lookups be completed before logit calls can be made. Thus errors in the config file can only be reported to stderr or stdout instead of being saved in a file. PNL 11/29/00 libsrc/util/k2evt2ew.c: This library supports a maximum EVT data size of 800000 samples per channel per EVT file. This value is hardcoded as MAXTRACELTH in include/k2evt2ew.h. k2evt2ew() will return a warning if the EVT file exceeds this size, and process as much as the EVT file as the hardcoded limit allows. DK 2003/01/18 import_ida: Modified to build under WIN32(#ifdef'd a couple of includes and modified the NT makefiles.) (saved under tag HYDRA_V1-20) Modified for SCNL and Tracebuf2. DK 2005/04/22 TRACEBUF messages. The definition of `endtime' of the TRACEBUF message is not documented. Some programmers are taking it as the "expected start time of the next TRACEBUF packet (if the sample interval is uniform.)" The more accepted practice is that `endtime' is the time of the last sample of the current TRACEBUF packet; that is, one sample interval less than the expected start time of the next TRACEBUF messsage. Using this last definition, if a TRACEBUF packet has exactly one sample, then its starttime and endtime are the identical. Clearly this distinction needs to be documented. The file waveform_format (in the /home/earthworm/DOC directory) gives no specifics about start or end times. PNL 1/24/01