# Earthworm Release Notes V4.1

(January 20, 2000)

    NEW MODULES:
    ***********

    sac2hypo:  This program works only under Solaris. It reads the headers
       of all the SAC files in the current directory and creates a
       Hypoinverse archive file. This archive file can be used to relocate
       the event. This program was written some time ago by someone else
       (I presume Lynn Dietz). It has now been made into an earthworm
       utility program.   LV 8/12/1999

    tide2ew:  This program works only under NT. It listens to
       serial line communication from the pucks which collect tide
       data. It connects to a COM port (given the serial communication
       parameters from the config file) and asks each puck for its
       reading every WaitTime seconds. After NumSamples for an SCN
       have been collected, a new TYPE_TRACEBUF message is created
       and written to the OutRing stamped with the SCN code given
       in the configuration file.
       Besides creating earthworm messages, this module can write
       tide readings to the screen and to files. The format of the
       output files is taken from ATWC.  This program is part of the
       ATWC contributed software.   LV 8/2/1999

    fir: This module implements a general-purpose FIR filter for
       trace data. Low-pass, high-pass, multi-band-pass and notch filters
       can be specified using simple commands in the configuration file.
       Filter coefficients are computed using the Remez Exchange
       algorithm to give an optimal equiripple filter. The filter
       zeroes are logged on startup. Using the "TestMode" command in
       the config file, the module will compute coefficients, log the
       zeroes and then quit. Uses many of the components in the revised
       decimate module.   PNL 10/27/1999

    wave_serverV/Tools: Three tools: inspect_tank, read_index and read_struct.
       These three tools are to help with problems in wave_serverV tank,
       index and structure files. These are primarily for development work.
       PNL, 1/12/2000

    ring2sac: Writes continuous sac files given a list of Station, Component,
       Network names.  This software is contributed by University of Utah
       Seismograph Station.

    MODIFICATIONS/BUG FIXES TO EXISTING MODULES:
    *******************************************

    compress_UA/decompress_UA:  Renamed compression/decompression
       routines supplied by Boulder Real Time Technologies to
       brtt_gencompress and brtt_genuncompress. By suggestion from
       Kent Lindquist -- apparently the official releases of these
       routines are part of the Antelope software, so using their
       generic names causes compilation problems whenever Antelope
       libraries have to be linked in. LV 12/27/1999

    trig2disk/waveman2disk:  Modified the sac putaway routine to
       enable correct creation of SAC files on NT. Since there are
       (I think) no SAC tools for NT, the OutputFormat should be set
       to sparc. Care should be taken when transferring files between
       NT and Solaris (ASCII mode in ftp works best). LV 12/20/1999.
       Modified to correctly create PCSUDS format files under NT.

    carlsubtrig:  Added the "MaxTrigMsgLen" command to set the size of the
       buffer used to write TYPE_TRIGLIST2K messages to.  This buffer is
       allocated at startup (previously, a minimal buffer was allocated
       on startup, then was realloc'd in 1024 byte increments as necessary).
       If a triglist message would overflow this buffer, carlsubtrig will
       stop writing to the buffer, but will continue to write the complete
       triglist message to its log. It will also send this error message
       to statmgr:  "incomplete triglist msg sent for eventid:%d".
       Also, if the event triggered enough subnets such that a wildcard
       would be added to the triglist message, the wildcard is now written
       at the beginning of the message instead of the end (just in case
       that big triglist message would overflow the buffer, the wildcard
       will always be included!).  LDD 8/6/1999

    export_generic
    export_scn    :  Fixed a memory leak in export.c.  Previously, each
       thread allocated its own working buffer(s).  But when export did a
       internal restart, it would kill the threads, never freeing
       the memory. The threads would be restarted, malloc another working
       buffer...  Enough internal restarts and export would suck up all
       available memory.  Changed so that all working buffers are allocated
       in the main thread, before any other threads are started.  All
       buffers are freed when the program exits.  LDD 9/7/1999

    decimate:  Major revision. Decimate is now a multi-stage filter-decimator.
       The filter coefficients are computed based on the decimation rate, using
       the Remez Exchange algorithm. Since each channel requires several buffers
       to be allocated at startup, channels must be explicitly listed in the
       config file (no wildcards.) Thus it didn't seem convenient to keep Lucky's
       cool rewrite rules: Now output SCNs get listed explicitly with the input
       SCNs. PNL 10/18/1999

    read_arc.c: (part of libsrc/util) Corrected the reading for coda length (was reading
       the raw coda; now reads the eqcoda-corrected coda) and added the reading of
       coda weight. Added codawt to Hpck structure in read_arc.h. PNL, 10/20/1999
         Added reading of preferred magnitude fields from the summary line.
       Added labelpref,Mpref,wtpref to the Hsum structure in read_arc.h. LDD 11/08/1999

    wave_serverV: Removed "fix4_3.3" from the default target of the makefile.
       No one should need this program any more; it was only for converting tank
       structures from an old format to a new one provided by v3.3.
       PNL, 10/28/1999

    getmenu: Fixed bug that prevented hostname lookup from working on NT. The
       problem was that SocketSysInit() was not being called before the
       hostname lookup occurred. Now you can give getmenu a hostname or and
       IP address (followed by ":portnumber") on NT as well as Unix.
       PNL, 11/19/1999

    export: It was such that if the connection to import broke while a
       message was being sent, that that message would be lost. Fix is
       to save the message until it was sent ok (as per socket return value),
       and re-send the message after closing and re-opening the connection.
       Alex 11/20/99

    arc2trig: Added two optional parameters:
    	 PrePickTime (default=15)
    	 PostCodaTime (default=10)
       which specify how much data to save preceding the p-pick, and
       following
       coda cutoff.
       Alex 11/24/99

    statmgr: Changed logit message about "Descriptor file of statmgr not loaded".
       This error is also generated when the EW_INSTALLATION environment variable
       doesn't match instId in statmgr.desc. PNL, 11/24/99

    heli_standalone: Changed GIF file names so they would be the same on local
       and (optional) remote machines, as well as in the HTML file. HTML file
       will now list separate GIFs when less than 24 hours is plotted on one
       GIF. Fixed bug that caused core-dumps when socket debugging was turned on.
       Added optional command to name the HTML file.  PNL, 11/29/99

    carlstatrig: Added LTAtime as a configurable parameter, as requested by
       Tom Murray. Previously this was hardwired to 8 seconds. This is an
       optional parameter, defaults to 8 seconds. PNL, 1/10/00

    hyp2000: New version grabbed from Fred Klein 1/11/00.
         Fixes a bug which had caused a core dump or crash with an error about
       writing to unit 5.  Symptom was known to occur on startup when a
       crustal velocity model file (CRH command) contained a blank line at
       the end.  Now hyp2000 writes an error message an exits.
         Also fixes bugs that are related to shadow cards. Used to write Pmag
       information to summary shadow whether the mag was being calculated or
       not, and wrote Pmag info to phase shadows sometimes when not necessary.
         Also has a new command, FIL, which determines the format of the
       input file set with the PHS command.  It discriminates between hypo71
       phase, *.cod and *.arc files (with and without shadow cards, both old
       and y2000 formats).  It also warns you if you are reading a pre-y2000
       file in y2000 mode, and vice versa.  It sets the correct formats with
       the COP and CAR commands.  The FIL code also senses the 4 different
       summary formats and tells you what the file is, but of course warns you
       that you should not be trying to locate a summary file.  The FIL command
       should be useful interactively, but it is not necessary for real-time
       use.  LDD, 1/11/00

    hyp2000_mgr: Edited makefiles to work with the newest version of
       hyp2000 (new command in new source file).  LDD, 1/11/00

    socket_ew_common.c (in libsrc/utils): accept_ew now sets the new socket
       to nonblocking mode as required for sockets used by socket_ew_common;
       previously it was assumed that this property was inherited from the
       original socket. Most functions now properly react to select() errors;
       previously they were ignored. Most function comments have been updated
       to be more meaningful. Fixed bug in accept_ew where it would close the
       old socket if no connection was accepted without the timeout interval.
       PNL, 1/12/2000

    export: (scn and generic) Export no longer quits when SocketTimeoutLength
       is less than RcvAliveInt; now it sets SocketTimeoutLength to 1500 times
       RcvAliveInt and logs it. (RcvAliveInt is in seconds, SocketTimeoutLength
       is in milliseconds.) Removed some unneeded if's from binEscape() to
       improve efficiency. Moved start of MessageStacker to after successful
       accept_ew call, to reduce number of lapped messages in queue. Removed
       flush of internal queue. Export now uses a timeout for the accept_ew
       call. The interval is the internal heartbeat interval, so statmgr doesn't
       complain when export isn't connected. If a connection is not made in
       the timeout interval, export sends a complaint but otherwise keeps
       listening and beating its heart. When a connection is made, export
       sends a "connected" message only if it complained earlier. This adds
       two new error messages to the descriptor file.
       When export has a problem sending or receiving, it kills the socket
       threads, closes and reopens the socket and tries another connection.
       The MessageStacker does not get killed in the recycling.
       Fixed a bug where BinSize was not being set to zero after a message
       was successfully sent. This bug resulted in one message being resent
       when the SocketSender restarted. PNL 1/13/2000

    wave_serverV: Added optional parameter "ClientTimeout", used in
       serverThread. When no traffic is heard from a connected client in
       this timeout interval, the socket is closed and the serverThread exits.
       Previously, wave_serverV.d stated that this was the function of
       SocketTimeout, which it was not. Fixed bug in shutdown sequence
       where KillThread was being called with uninitialized values. Sometimes
       this would kill the main thread, aborting the shutdown sequence. This
       may have been the cause of Menlo's wave_serverV hanging on shutdown.
       Cleaned up settings of ServverThreadInfo.Status in server_thread.c
       and wave_serverV.h. Small change to index_util.c to add some detail
       to logit error entry in BuildLIndex(). Reformatted comments at head of
       wave_serverV to make them easier to read.  PNL, 1/12/2000

    rcv_ew and vdl_ew:  Both modules have been updated to the newest version of
       rcv and vdl from Dave Ketchum.  BB 1/16/2000

    CHANGES TO CONFIGURATION FILES and DESCRIPTOR FILES:
    ****************************************************
    carlsubtrig.d: Added "MaxTrigMsgLen nbytes" command to control the size
       of the output buffer.

    carlstatrig.d:
       Added "LTAtime" command to set nominal time of LTA average. This is an
       optional parameter, defaults to 8 seconds.

    carlsubtrig.desc:  Added a new error code for the case when the triglist
       message would overflow the output buffer:
        err: 23  nerr: 1  tsec: 0  page: 10  mail: 20
        text: "Incomplete triglist message sent."

    adsend.desc: Added a new error code:
        err: 7  nerr: 1  tsec: 0  page: 0  mail: 10
        text: "Fewer samples were obtained than requested."

    decimate.d and decimate.desc: Several new commands due to the extensive
        changes in the module.

    heli_standalone: Added optional command to name the HTML file; default name
    is "index.html". Added description of optional "Target" command to conf file.
    This option was always available, but left out of the working config file.

    export_*.desc: two new error messages to report slow connections.

    wave_serverV.d: optional command ClientTimeout; corrected comments for
      SocketTimeout

    KNOWN BUGS or DEFICIENCIES:
    **************************
    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.

    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.

    carlsubtrig: Occasionally (once every few months in Menlo Park), the
    event id gets reset to zero.  This smacks of a memory clobber, but we
    haven't tracked it down yet. This has been observed in v4.0 carlsubtrig
    on x86 Solaris. LDD 9/28/1999

    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

    The Solaris version of SendMail calls popen to invoke the Mail program.
    If the mail program can't be found, Solaris prints the message:
                   sh: /usr/ucb/Mail: not found
    The SendMail function returns 0 (no error), instead of -1 (error), so the
    calling program can't tell that an error occurred.