# Earthworm Release Notes V7.0

(June 15, 2006)

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 v6.2 on 4/15/2003
    Note that v6.3 was a CVS snapshot that was released on 9/21/2005
    This release is EW V7.0 and has all of the v6.3 changes and many SCNL upgrades.

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

    cleandir:
    A contrib from Hydra for Windows. Here's the description I got
    from John Patton:
    This program is a rewrite of the old Menlo cleandir. Cleandir
    runs as a Windows service (as opposed to running as a Windows
    Scheduled Task) and monitors the directories specified in the
    configuration file.  The criteria for deletion are as follows:
    If any file has a modification date/time older than the age
    specified in the configuration file, that file is deleted.
    Installed by PAF 6/06/2006 in grab_bag

    liss2ew_scnl:
    This is a contribution from HYDRA EW and is an upgrade. This has
    only been tested under Windows and thus only has a makefile.nt
    This is basically a SNCL'ized version of liss2ew but has been
    converted to C++.
    Installed by PAF 5/26/2006

    ringtocoaxII:
    This is a contribution from HYDRA EW and is an upgrade. This has
    only been tested under Windows and thus only has a makefile.nt
    in this release.  From notes that John Patton sent me:
            There are basically 3 differences between ring2coax and ring2coaxII:

                    1. ring2coaxII is multithreaded.
                    2. ring2coaxII has an input queue
                    3. ring2coaxII has my attempt at an adaptive algorithm that increases
    		the outgoing udp data rate as the queue fills up (within configurable
    		limits).  It also tries to "smooth" the udp message load so that we're
    		at a constant level rather then spikes and troughs (not very good at
    		this, but better than nothing).

            The design idea behind it was that we had problems with ring2coaxII getting cpu
    	starved for a few seconds and loosing data, thus the input queue.  The other half
    	was how our udp load on our network would change drastically from second to second
    	from very high to very low, we wanted some sort of way to "smooth" it out.  I've
    	had limited success on that one.
    Installed by PAF 5/26/2006

    pkfilter:
    The purpose of pkfilter is to reduce the number of "duplicate" picks
    from a given "station". For pkfilter, all components which have
    matching station code and network code are considered to be the from the
    same "station". The rules for what are considered "duplicate" picks
    can be found in the file:
    vX.X/src/seismic_processing/pkfilter/pkfilter.designspecs.txt
    Pkfilter is location-code friendly and will handle both the TYPE*2K
    and TYPE*SCNL versions picks and codas.  LDD 5/5/2004

    statrigfilter:
    The purpose of statrigfilter is to eliminate "duplicate" triggers
    from a given "station". For statrigfilter, all channels which have
    matching station code and network code are considered to be the from the
    same "station". The rules for what are considered "duplicate" triggers
    can be found in the file:
    vX.X/src/seismic_processing/statrigfilter/statrigfilter.designspecs.txt
    Statrigfilter is location-code friendly and will handle both
    TYPE_CARLSTATRIG_SCNL and TYPE_CARLSTATRIG messages.  LDD 11/23/2005

    putpick:
       Putpick is a command-line testing tool which allows one to replay
    a file containing picks and/or codas into an Earthworm ring.
         Usage: putpick
    Putpick reads a file containing a series of pick/coda msgs
    and write them to shared memory.  The file can contain a mix
    of TYPE_PICK2K, TYPE_PICK_SCNL, TYPE_CODA2K, TYPE_CODA_SCNL,
    and also comments.  Only valid TYPE_PICK* and TYPE_CODA* msgs
    will be written to shared memory; all other lines will be ignored.
       Putpick is useful for replaying picks into binder - binder's
    logfile (or a portion of it) can be used as the input file
    to putpick, or the picks can be placed in a separate file.
       If pause = y, the relative timing of writing msgs to ring is
    based on delta-t in the timestamps in the picks.
       If pause = n, the msgs are written to the ring as fast
    as they are read from the file.   LDD 6/25/2004

    ws_clientIIx:
    Added a new set of ws_client routines (ws_clientIIx), that are used by
    ora_trace_fetch.  The new routines were designed to streamline and
    simplify access to the wave_servers while conserving wave_server
    resources.  (The routines handle connect/disconnect for the caller,
    and if given a list of requests, the routines will sort the request
    by wave_server, so that it will connect to one wave_server, retrieve
    the appropriate data, disconnect from the first and connect to the
    second, retrieve the appropriate data, and so on.
    The routines were written in 2001, (derived from ws_clientII) and have
    never been as thoroughly tested as ws_clientII.
    The routines have not been scheduled for SCNLizing.
    DK 072004

    scn2scnl,scnl2scn:
    A pair of conversion modules (code resides in data_exchange/scn_convert)
    to change trace data, picks and codas from the original Earthworm formats
    with site,component,network codes to the new Earthworm formats using
    site,component,network,location codes and visa versa.  Written by Will
    Kohler, modified by Pete Lombard to do SCN->SCNL lookups.
    LDD 10/21/2004

    slink2ew:
    A seedlink client for acquiring data from seedlink servers (e.g. IRIS)
    and converting to tracebuf2 (or optionally tracebuf). Much more robust
    than liss2ew. Written by Chad Trabant of IRIS; modified for tracebuf2
    and debugged by Chad Trabant and Jim Luetgert.
    JHL 4/19/05
    PAF Updated with version 1.3 on 1/30/2006

    export_ack, export_scnl_ack:
      This new version of export expects to receive an acknowledgment packet
    for every packet it writes to the socket. Creation of this new version
    was desired because we observed during the export of continuous trace
    data that during a communication failure, export was able to successfully
    write several messages to the (broken?) socket, but import never received
    them. When the socket was re-established, those messages were lost forever.
      Acknowledgments are received asynchronously by the socket-reading thread.
    A circular buffer, SendQueue, tracks the status of msgs after they been
    pulled from the MessageStacker queue. If the socket is broken/reconnected,
    export*ack re-sends any msgs in the SendQueue which haven't been
    acknowledged. In normal operation, if export*ack laps the SendQueue and
    finds a message that has been sent but not ACKed, it will sleep 10ms and
    then check status again, looping until an ACK is received before preparing
    to send the next message.
      The SendQueue length is configurable, from 1 to 254 messages (default=100).
    Using a shorter SendQueue can cause a decrease in the rate at which
    export will send messages. A slower rate might be desireable so
    that an import system is not flooded by data after a prolonged
    communication break. In testing with export and import on the same
    machine, these are export's approximate maximum data rates:
      SendQueueLength =   1,   10 messages/second
      SendQueueLength =  10,   90 messages/second
      SendQueueLength = 100,  350 messages/second
    Using the default SendQueueLength, export*ack's data rate was not
    observably different than export_generic's data rate.
      export*ack requires using the new import_ack to communicate properly.
    Since the receipt of ACKs is asynchronous, we may now have the opposite
    problem to that we had before (duplicate data instead of lost data). It
    is now possible that import_ack actually received a packet, but export_ack
    didn't get the ACK before the socket broke. In this is case, export_ack
    will re-send the packet and import_ack will see the same packet more than
    once. The system running import_ack must be prepared for duplicate data.
    LDD 4/29/2005

    import_ack:
      This new version of import is required as the data exchange partner
    for the new export*ack modules. However, it can communicate with either
    old or new-protocol export modules, and can therefore be used anywhere
    in place of import_generic.
      From the first message received per socket connection, import_ack
    discovers what flavor of export it's talking to. It will do either
    old non-ACK or new ACK protocol as appropriate on the fly.
      Import_ack has been modified to use same configuration commands as
    export for setting up the server connection and socket heartbeat
    strings and intervals. It still recognizes the original import_generic
    commands.
      Since the receipt of ACKs by export_ack is asynchronous, we may now
    have the opposite problem to that we had before (duplicate data instead
    of lost data). It is now possible that import_ack received a packet,
    but the socket broke before export_ack received the ACK. In this is case,
    export_ack will re-send the packet and import_ack will see the same packet
    more than once. Therefore, the system running import_ack as a partner to
    export_ack must be prepared to handle duplicate data.  LDD 4/29/2005

    wftimefilter:
      This new module was created to "sanitize" incoming waveform data
    streams to the liking of Earthworm modules. It reads waveform data
    (compressed or uncompressed) from one transport ring and writes it
    to another ring, filtering out duplicate data, time overlaps and
    bogus future timestamped data. Timestamp checks are done for each
    channel independently. The check for bogus future timestamps requires
    that the system clock is set to network time.
      Wftimefilter can be configured to output the messages using the
    original installation/moduleid or its own installation/moduleid.
    However, it does not alter the contents of the message in any way.
      Systems which are importing data using import_ack/export*ack should
    probably use wftimefilter to remove possible duplicate data after
    an import/export reconnect. Systems importing waveform data from
    non-Earthworm data sources should also consider running wftimefilter
    to ensure that only chronological timeseries enter their own Earthworm
    processing.  LDD 5/10/2005
      Modifed to allow additional optional behavior:
       1)rejecting packets that have a sample-rate different than the expected one for the
         channel.
       2)Limiting per-channel logging, to limit logfile size and increase readability.
       3)Adding per-channel daily summaries of errors and warnings.
       4)Adding the ability to issue a STATUS message to a ring as a part of the daily summary.
      Default behavior should be unchanged.
    DK 2006/03/27

    startstop_service:
    (added to CVS by Paul Friberg 6/29/2005, authored by Mark Morrison)
    From the README.txt found in the src/system_control/startstop_sevice:
    startstop_service is identical to the old startstop_nt, except that
    it runs as a Windows service.  This means that the parameters are all the
    same - read from startstop_nt.d - but that startstop isn't just executed
    from a command window or via the scheduler.  Note that this version is
    taken from startstop_nt, so I haven't compiled or tested any of this under
    Solaris or other systems.  I believe it's generally felt, however,
    that these modifications don't apply to Solaris.

    srparxchewsend: as a new data source. This is contributed by Symmetric
    Research for their digitizers. It was installed in data_sources by
    Paul Friberg Jan 5, 2005.

    rayloc_ew:
    (last revised 13 July, 2004) Ilya Dricker at www.isti.com
    Rayloc_ew is an Earthworm Module to perform global relocation of
    earthquakes and travel time computation.  Rayloc_ew is an Earthworm-style
    wrapper around a Fortran program RayLoc written by Ray Bulland.
    Rayloc_ew attaches itself to the input ring and monitors the ring buffer
    for the TYPE_LOC_GLOBAL

    messages.  Rayloc_ew reformats the input and calls FORTRAN RayLoc processing
    machinery. The output of rayloc_ew is TYPE_RAYLOC
     message,
    which is written to the output ring.  The rayloc_ew program is compiled
    and tested out on a Solaris platform (with gcc and g77 compilers).

    startstop_unix:
    Added in this Linux'ified version of startstop (uses a startstop_unix.d file)
    from Alexandre Nercessian: PAF 9/7/2005

    raypicker:
    Added this from the HYDRA package for Mitch Withers. This is the picker
    that is used by NEIC to feed glass. Only compile tested under Windows
    at this point since that is where NEIC uses it.
    PAF 01/30/2006

    glass:
    Add this from older NEIC distro. This is a global associator written
    by Carl Johnson. This module will only compile/run under Windows.
    PAF 01/30/2006

    eqfilterII:
    Added in this new module from Mitch WIthers for handling arc, global,
    and rayloc message types.
    PAF 01/30/2006

    geqproc:
    Same tasks as eqproc, but this takes global messages instead of
    arc messages. Part of global event processing chain.
    PAF 01/30/2006

    globalproc:
    Moved globalproc from NEIC v0.1 to v7.0.  Recall that globalproc
    listens to the glass chatter, assembles quake, pick, and amp messages
    into a global loc message, and sends it to the ring when appropriate.
    Combined with geqproc, the two accomplish the same thing as what
    eqproc did for binder.  This strays from the original intent of globalproc
    allowing a tweaked eqproc and globalproc to "eat" glass output simultaneously
    but given that we have rayloc, geqproc only needs to locate local events
    so this lashup was easier and does the job. Comments by Mitch Withers:
    PAF 01/30/2006

    config_ws:
    This module will listen on a wave_ring for scn or scnl type trace_buf[2]
    messages and create a waveserverV configuration file for the tanks. It
    has a number of configuration options to specify how many tanks and of
    what size they should be.
    This nifty little module is contributed by John Patton of the Hydra
    group and installed by Paul Friberg (only compiles under Windows).
    PAF 02/09/2006

    reconfigure:
    This command line tool sends a reconfigure request to startstop. Startstop
    will then re-read startstop_*.d and start up any new rings or modules it
    finds. Duplicate module names and duplicate ring names are not allowed.
    Necessary for this to work is the addition of
    Message  TYPE_RECONFIG	     112
    to the earthworm.d file.
    s.lisowski 20060405

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

    hyp2000: update for Intel 9 Fortran compiler (from v6.3)
    note there is a makefile.nt_intel9 and a new line
    for linking to the intel 9 compiler in the ew_nt.cmd.
    For Linux, hyp2000 compiles but is still majorly broken.
    PAF 6/6/2006

    ringdup:
    Added in a Hydra contribution that allows BLOCKING if particular
    SCNL's. This is all encapsulated in the scnfilter_exclude.c code.
    This compiled fine under Solaris, but has only been really tested
    under Windows. I did not upgrade the makefile.ux to use this yet
    until it has been tested. Look in the new .d file to see the
    notes about Block_scnl, but here's what I got from John Patton:
    blocker is what Hydra calls this version
    This module is a tweak to the program ringdup_scn.  It involved adding
    functionality to explicitly block channels by SCNL while letting others
    not specified to be copied from the input ring to the output ring.
    The functionality is not implemented in ringdup.c itself, but in the
    library scnfilter.  To avoid confusion, since scnfilter is used by
    export, this file was copied to the ringdup directory and renamed
    scnfilter_exclude.  This file is identical to the original scnfilter
    except for the required changes.  The makefile for ringdup was modified
    to link to scnfilter_exclude instead of scnfilter.  The library has also
    recently been enhanced so that ringdup_scn understands the message
    type TYPE_PICK_GLOBAL.
    Modifications made by PAF 6/6/2006

    seisan:
    Seisan format export in waveman2disk, trig2disk (and therefore archman, etc.)
    Edited seiutils.c to truncate insignificant digits off the end of a
    numerical comparison so as to eliminate problems where the Seisan data file
    would null out after a certain point in the middle of the file, and render
    half the file useless.

    startstop:
    Reconfigure or 'recon' command added to startstop module. The command can
    either be given by running the command-line 'reconfigure' tool, or by typing
    'recon' or 'reconfigure' into the interactive EARTHWORM STATUS interface.
    Startstop will then re-read startstop_*.d and start up any new rings or
    modules it finds. Duplicate module names and duplicate ring names are not
    allowed. Necessary for this to work is the addition of
    Message  TYPE_RECONFIG	     112
    to the earthworm.d file.
    Also some startstop commonalities for all four platforms (Windows, Windows
    Service, Linux, Solaris) were added to libsrc/util/startstop_lib.c, commonalities
    between Solaris and Linux were added to libsrc/util/startstop_unix_generic,
    commonalities between Windows and Windows Service were added to
    libsrc/winnt/startstop_winlib.c.
    s.lisowski 20060405
    Incorporated Hydra StartstopConsole into the Windows startstop_service, and
    created Hydra-independent makefiles for necessary objects
    s.lisowski 20060606

    statmgr:
    Modified to allow up to 10 pagegroup commands in statmgr config file.
    Modified descriptor files to allow optional module-specific settings for
    pagegroup (up to 10) and mail (up to 10) recipients. Any pagegroup or
    mail setting in a descriptor file overrides the statmgr config settings.
    This will allow the user to fine-tune on a per-module basis the recipients
    of various Earthworm notifications.
    Modified logfile name to use the name of the statmgr config file (had
    been hard-coded to 'statmgr*'.
    Modified logging of configuration and descriptor files.
    LDD 2006/4/25
    Added new command "From" to allow user to set the "From" field of outgoing
    email messages. This command is used only in the Windows version of statmgr.
    If the "From" command is ommitted, the email "From" field will be filled
    using environment variables %USERNAME%@%COMPUTERNAME%. Previous versions
    of SendMail() defaulted to root@mailserver. LDD 2006/05/19

    logit:
    Made it so that logit now appends a platform-specific slash to EW_LOG if
    there isn't one. This allows for a more consistent entry on in the
    environment/ew_.{cmd,bash} file.
    s.lisowski 20060405

    gmew:
    Added in SCNL capability (no longer available for just SCN) and upgraded
    to the new version of ShakeMapXML (v3.1). I also patched a minor wave server
    warning message to be more explicit (empty menu) and added versioning
    to the program itself.
    PAF 03/15/2006

    heli_ewII:
    Added in SCNL capability (no longer available for just SCN).
    PAF 03/15/2006

    libsrc/solaris/sleep_ew.c:
    Added: #include    WMK 3/22/04

    libsrc/solaris/transport.c:
    Added: #include
    Function tport_bufthr() now returns NULL.  WMK 3/22/04

    libsrc/winnt/transport.c:
    Added: #include

    libsrc/util/kom.c
    Changed: "static struct k_buf" to "struct k_buf"   WMK 3/22/04

    libsrc/util/trheadconv.c
    New function to convert TYPE_TRACEBUF headers to
    TYPE_TRACEBUF2 headers.  WMK 4/29/04

    libsrc/winnt/sendmail.c
    Increased BUFFSIZE from 200 to 250, to accomodate more email recipients.
    This is a kludgy fix.  It might better to allocate the buffer on the fly,
    to accommodate any number of email messages.  Also, note that I did not
    increase BUFFSIZE in libsrc/solaris/sendmail.c  WMK 6/11/03

    libsrc/util/getutil.c
    Added new functions: GetKeyName, GetInstName, GetModIdName, GetTypeName.
    These functions take a numeric value (shared memory key, installation id,
    module id or message type) as their argument and return a pointer to its
    corresponding character string name from the earthworm*d tables.  If the
    numeric value is not in the earthworm*d tables, the functions return a
    NULL pointer.
    Added new function, GetLocalInstName, which return a pointer to the
    environment variable EW_INSTALLATION.
    LDD 7/29/2004

    libsrc/util/rw_strongmotionII.c:
    Changed rd_strongmotionII() to interpret both "-" and "?" as NULL strings
    when reading the QID: line qid and qauthor fields.  Previously only
    accepted "?" as a NULL string.  Change was required by CISN data which
    uses "-" as a NULL string in those fields.  LDD 2/13/2004

    adsend:
    Modified to produce tracebuf messages with trace2 headers.
    These headers contain location code and header version number.
    Old-style tracebuf messages (w/o location code) are no longer
    made.  WMK 4/22/04

    pick_ew:
      Modified to create picks and codas containing SCNLs.
    Input waveform messages may be of either TYPE_TRACEBUF or
    TYPE TRACEBUF2.  WMK 4/29/04
      Added new optional config file command so that pick_ew can choose
    which messages to process: GetLogo
    There's no limit to the number of GetLogo commands that can be used.
    If no GetLogo commands are used, then pick_ew will process all
    TYPE_TRACEBUF and TYPE_TRACEBUF2 messages in InRing. LDD 4/8/2005

    carlstatrig:
      Modified for location code. Reads TYPE_TRACEBUF2 and produces
    TYPE_CARLSTATRIG_SCNL messages. PNL 5/5/2004
      Added new optional config command so that carlstatrig can choose
    which messages to process: GetWavesFrom
    There's no limit to the nubmer of GetWavesFrom commands that can
    be used. If no GetWavesFrom commands are listed, then carlstatrig
    defaults to "GetWavesFrom INST_WILDCARD MOD_WILDCARD". LDD 4/12/2005

    binder_ew:
      Modified to use TYPE_PICK_SCNL as input.  Required changes to the
    station file reading library, site.c, and to the hypoinverse site file.
    LDD 5/17/2004
      Modified to attempt pick association with entire quake list before
    attempting a new stack. Previously only attempted association with
    the 10 most recent events.  This should allow picks to arrive fairly
    late (out-of-real-time) and still be associated with an event. This
    will prevent such picks from restacking into a new, duplicate event.
    This modification requires that binder keep track of the earliest
    pick sequence number associated with each quake so that no hypocenter
    updates are attempted if some of the supporting picks are no longer
    in the pick FIFO. If a Pick  associates with an event that can't
    be updated, a TYPE_LINK message will go out, but no relocation will
    be done, and no new TYPE_QUAKE2K message will be issued.
    LDD 10/21/2004
      grid.c changes: Added sanity check on mStack value; modified grid_stack
    to go thru pick list from newest to oldest pick.
    LDD 10/29/2004
      bind.c: Modified to make the pick and quake FIFO lengths configurable.
    Added two optional config file commands:
    pick_fifo_length xxxx (default = 1000 = previous hardcoded length)
    quake_fifo_length yyy (default =  100 = previous hardcoded length)
    Only large networks should need to consider using these commands to
    increase FIFO sizes. Care must be taken to ensure that eqproc/eqprelim
    FIFO lengths are the same length (or larger) than binder_ew's FIFOs.
    LDD 3/9/2005
      Modified to shut down cleanly on termination request. LDD 4/15/2005
      binder_ew.c: Added two optional commands:
    BufferRing  ringname (default = BINDER_RING = previous hardcoded string)
                This defines which ring binder will use for private storage
                space for incoming picks. ringname must exist in an earthworm.d
                "Ring" line.
    EventIdFile filename (default = quake_id.d  = previous hardcoded string)
                This defines the name of the file that will contain the
                next valid eventid for binder to apply to a new association.
    Having these two items hardcoded had made it extremely tricky to run
    multiple instances of binder on the same host without them competing for
    common resources. Now it will be a simple matter of different configuration
    files to run multiple instances. This could be useful in testing
    different binder configurations.  LDD 8/1/2005

    eqproc:
    Modified to use TYPE_PICK_SCNL and TYPE_CODA_SCNL as input.
    Modified to produce TYPE_EVENT_SCNL as output.
    LDD 5/17/2004
      Modified to make four more operational parameters configurable.
    All are set with new optional config file commands and default to
    the previous hardcoded values if their commands are ommitted.
    1. pick FIFO length ('pick_fifo_length' command, default = 1000)
    2. quake FIFO length ('quake_fifo_length' command, default = 100)
    For proper event reporting, eqproc's pick and quake FIFO lengths must
    greater than or equal in length to binder's FIFOs.
    3. heartbeat interval ('HeartbeatInt' command, default = 0.3*tReport)
    4. time interval at which quake FIFO is checked for events that are
    ready to send downstream ('rpt_check' command, default = 0.3*tReport)
    Items 3 & 4 were previously a hardcoded fraction of tReport, which is
    configured with the optional 'rpt_dwell' command (default = 30 s).
    These changes should allow eqproc to send events downstream in a more
    timely fashion.  LDD 3/10/2005

    eqprelim:
    Modified to use TYPE_PICK_SCNL and TYPE_CODA_SCNL as input.
    Modified to produce TYPE_EVENT_SCNL as output.
    LDD 5/17/2004
      Modified to make two more operational parameters configurable.
    Both are set with new optional config file commands and default to
    the previous hardcoded values if their commands are ommitted.
    1. pick FIFO length ('pick_fifo_length' command, default = 1000)
    2. quake FIFO length ('quake_fifo_length' command, default = 100)
    For proper event reporting, eqprelim's pick and quake FIFO lengths must
    greater than or equal in length to binder's FIFOs.  LDD 3/11/2005

    eqcoda:
    Modified to use TYPE_EVENT_SCNL as input and to write location codes
    in the TYPE_HYP2000ARC message it puts out. Added new optional command
    "LogArcMsg" to control whether output TYPE_HYP200ARC msg is written to
    eqcoda's log file (0=don't log; non-zero=do log it).  LDD 5/20/2004

    hyp2000:
    Grabbed Fred Klein's most recent version of hyp2000 which is location-code
    compliant.  LDD 7/01/2004
    Grabbed Fred Klein's most recent version of hyp2000 which has a new
    command 'DI1' to set a different distance weighting scheme for early
    iterations.  Normal distance weighting is still set with the 'DIS'
    command. This change was prompted by trouble locating the Parkfield
    mainshock of 9/2004.  LDD 12/8/2004
    Grabbed Fred Klein's most recent version of hyp2000 which has added
    logic to allow location codes "  " and "--" to match (they both
    represent a "blank" location code). LDD 10/5/2005

    ew2file:
    Added optional command "TimeBasedFilename X" to control whether a
    time string derived from the message contents is added to the beginning
    of the output file names. If X is zero (default), original file naming
    convention is used (SequenceNumber.suffix). If X is non-zero, a time
    string is prepended to the filename (YYYYMMDD-HHMMSS.SequenceNumber.suffix).
    This option is only applicable for TYPE_PICK2K, TYPE_PICK_SCNL, and
    TYPE_HYP2000ARC messages. All other message types will be named
    according to the original convention regardless of the TimeBaseFilename
    setting.  Other messages types containing timestamps could be added
    to the new naming scheme in the future.  LDD 11/11/2005

    evanstrig:
    Modified to use TYPE_TRACEBUF2 as input and to write TYPE_LPTRIG_SCNL
    as output. Both message types include location codes.  Changed config
    file command "MaxSCN" to "MaxSCNL".  Added location code as the fourth
    argument to the "TriggerOn" command. LDD 5/21/2004

    evansassoc:
    Added location code; modified to use TYPE_LPTRIG_SCNL as input and to
    write TYPE_TRIGLIST_SCNL as output.  Added location code as the fourth
    argument to the "AddChannel" command. LDD 5/24/2004

    putter:
    Modified to read files of TYPE_PICK_SCNL and TYPE_CODA_SCNL. Added
    optional second argument, ringname (name of ring to write msgs to).
    Previously was hardcoded to write to PICK_RING. Will still work with
    TYPE_PICK2K and TYPE_CODA2K msgs as long as the installation id and
    moduleid are less than 100.  LDD 5/17/2004

    findwave:
    1. Modified to read both TYPE_TRACEBUF2 and TYPE_TRACEBUF msgs.
    2. Modified "d" output (debug) to include pin number and message logo as
    both character strings from earthworm*.d and numeric values. If a field
    of the logo is not in the local earthworm*d files, the debug output will

    show one or more of these strings: inst_unlisted, mod_unlisted, type_unlisted.
    If the channel's installation id is different from the local installation id
    (set by the EW_INSTALLATION environment variable), the module_id string will
    read: mod_not_local.
    3. Modified "w" output (wave_serverV) to include the actual installation
    and module id strings from earthworm*d files.  If the installation is not
    in the earthworm_global.d file, it will be listed as INST_WILDCARD.  If the
    moduleid is not in the earthworm.d file, it will be listed as MOD_WILDCARD.
    If the channel's installation id is different from the local installation id
    (set by the EW_INSTALLATION environment variable), the module will be listed
    as MOD_WILDCARD.
    4. Modified all output to be space-delimited rather than tab-delimited.
    LDD 7/29/2004

    findwave:
      Merged Hydra changes into findwave.  The default findwave behavior is unchanged.
      Hydra changes include:
         Option:  have tanks segmented by HD based on a HardDrive size
         Option:  have findwave truncate tanksizes to 1GB, to comply with
                  wave_serverV maximum safe tank size.
         Option:  have findwave massage the record sizes to be a fixed size
                  for all tanks.
         Option:  have findwave massage the record sizes for variable-record-length
                  channels to be slightly larger than the largest record received for that channel.
       Run findwave with no arguments for more information.

    gaplist:
    Added a "Total Gap" column to the output tables.  "Total Gap" is the
    total, in seconds, of the length of all gaps for a particular channel.
    "Total Gap" gets reset to 0 when the day rolls over.  Also, added a
    column named "Dead Time", which is the elapsed time since a channel
    died.  If "Dead Time" is blank, the channel is currently alive.
    "Dead Time" does NOT reset to 0 when the day rolls over. WMK 1/8/04

    gaplist: Slight table reformat.  WMK 1/20/04

    gaplist: Now accepts TYPE_TRACEBUF and/or TYPE_TRACEBUF2 messages.
    The config file (gaplist.d) now contains a list of SCNLs to monitor,
    rather than SCNs.  WMK 4/30/04

    gaplist: Added system-clock timestamp to logging of gaps/overlaps.
    Made slight formatting changes in logging.  LDD 5/7/2004

    gaplist: Now, the scnl array is allocated using realloc, so any number
    of Scnl and Label lines are permitted in the config file.
    Fixed two bugs:
    Label strings longer than 31 characters weren't null-terminated in the
    program.  Now, they are, so long labels are correctly truncated.
    Also, the label array, defined in gaplist.h, had a length of 31
    characters, which caused some values in the scnl array to get clobbered.
    This resulted in continuous dead/alive messages being sent to statmgr.
    WMK 5/11/04

    gaplist: Added new optional command: GetLogo
    If no GetLogo cmds are given, gaplist will process all TYPE_TRACEBUF
    and TYPE_TRACEBUF2 messages (previous default behavior).
    Modified to allow processing of TYPE_TRACE_COMP_UA and TYPE_TRACE2_COMP_UA
    messages (headers are NOT compressed!). LDD 4/11/2005

    evtK2ora:
    Fixed endTime bug in makeEwSnippet(). Thanks Jim L.
    Alex 5/9/03

    shakemapfeed:
    The last two arguments to ewdb_api_GetSMDataWithChannelInfo were
    reversed. That meant that the number of returned SM messages would be
    incorrect IF that number exceeded MaxDataPerEvent. The result would be an
    out-of-bounds memory access and corrupted SM data. PNL 6/9/03

    shakemapfeed:
    Changed the sorting used in Filter_SM_data. Now SM messages are sorted by SCNL
    instead of by idchan. That means that the output XML will have components of
    one station listed consecutively, a big help for shakemap. PNL 10/30/03

    shakemapfeed:
    Changed the length of the long station name in the mapping file from
    20 to 50 characters.  LDD 2/5/04

    skakemapfeed:  (EWDB API - Strong Motion) ewdb_internal_GetAllSMMessages()
    (Note: This function is called by ewdb_api_GetSMDataWithChannelInfo())
    Fixed a bug in PostGetAllSMMessages().  The idEvent field may be null
    for some records, and Oracle  does not appear to be writing a 0 value to
    the memory area for the null field, so that record assumes the
    idEvent of the previous record located at that point
    in the internal buffer.  The result is data corruption, such that you get
    messages that are unassociated with an Event, but they appear to be associated
    with an event.
    DK 02/12/04

    shakemapfeed: Added new optional command, SMQueryMethod, to control how SM data
    is requested from the DBMS. Default behavior is original 2-stage query (get
    all SM data associated with this eventid, then get all UNassociated SM data
    in a space/time box). If SMQueryMethod is non-zero, shakemapfeed will request
    all SM data in a space/time box. This will return SM data associated with this
    event, SM data associated with other events, and UNassociated SM data.
    Regardless of query method, post-query filtering will be performed on eventid,
    external eventid, and external author.  SM data associated with a different
    eventid but with the same author will be rejected.  Data with a different
    author will be allowed - this is most likely data imported from another
    network and its eventids are meaningless in our DBMS.  LDD 02/13/2004

    shakemapfeed: Changed the auto-feed scheduling logic to allow for variable
    time intervals between feeds to shakemap.  Feeds are scheduled at
    fixed times after the arrival of the archive message by using the new
    command, ScheduleFeed (one time per ScheduleFeed command, up to 20 allowed).
    Auto-feeds will continue at the last ScheduleFeed interval until UpdateDuration
    minutes after the event origin time.  ScheduleFeed replaces the original
    DelayFirstFeed and UpdateInterval commands. These original commands are still
    accepted and will set up the auto-feed schedule in the original manner in the
    absence of ScheduleFeed commands.  LDD 3/4/2004

    k2ew:
    The channel bitmap bug reported below has been fixed. K2ew now reads the
    correct bitmap to determine which channels are streaming. PNL 6/9/03

    k2ew:
    Version 2.38: K2ew will now, optionally, obtain network code from the K2
    headers, rather than from the configuration file.  For this to work, network
    codes need to be entered into the K2 using Altus File Assistant. A different
    network code may be entered for each stream.  The K2 must be running
    application firmware version 3.02 or later.  The "Network" parameter, in the
    config file, is now optional.  WMK 3/25/05

    liss2ew, ew2liss, dumpseed:
    There was a bug on Microsoft based systems that caused the user defined
    types BYTE, WORD, and LONG to be ignored.  This was a problem specifically
    with the type WORD, which was changed from a signed 16-bit value to an
    unsigned 16-bit value, causing many problems, most noteably with the
    signed seed varibles for sample rate and sample rate multiplier.  All
    liss based modules have had this problem corrected. JMP 06/17/2003

    getfile_ew:
    There was a feature in getfile_ew that could cause more cpu to be
    used than necessary by checking time since last heartbeat more
    often than necessary.  Added sleep_ew(1000) within heartbeat
    loop. MMW 06/29/2003

    getfileII:
    Ported getfileII to FreeBSD.  Two new files are in the source directory:
    makefile.bsd and socket_bsd.c.  No other changes to files. WMK 11/25/03

    getfileII:
    Added more string-length checking to config.c and to the incoming file
    names and output paths to avoid overflowing character arrays. Changed
    version number to 1.1.  LDD 7/28/2004

    sudsputaway:
    Added functions to properly initialize SUDS structures to
    Banfill's default values. CJB 10/3/2003

    sudshead.h:
    Updated to make more compatible with suds.h in current
    release of PCSUDS. CJB 10/3/2003

    file2ew:
    Fixed bug in raw2ew.c which caused file2ew to exit when the
    SuffixType command contained only 2 arguments.  The third
    argument (installation ID) was supposed to be optional, and
    now is!  LDD 10/3/2003

    ew2file:
    Fixed bug in timing of heartbeat file generation.
    Had been using HeartBeatInt instead of HeartFileInt to control
    the production loop.  Caused continuous heartbeat file generation
    when HeartFileInt==0.  LDD 11/24/2003

    sniffwave:
    Changed to sniff headers of both TYPE_TRACEBUF and TYPE_TRACE_COMP_UA msgs.
    Will only print data values for TYPE_TRACEBUF messages.  Changed to accept
    the any of these strings as wildcards in SCN: "wild", "WILD", "*".
    LDD 10/31/2003

    Modified to list both the Quality value and (if TRACE2_HEADER the Version
    value) in the header output.
    DK 2005/03/27

    sniffwave:
    Modified to sniff headers of TYPE_TRACEBUF2 and TYPE_TRACE2_COMP_UA msgs.
    Added new command-line argument  to support these new message
    types. LDD 4/13/2004

    vX.X/src/data_exchange/Makefile:
    Added directives for STANDALONE_MODULES (right now getfileII and sendfileII)
    so that their executables, which are created in their source directories,
    are also copied to the vX.X/bin directory.  LDD 11/27/2003

    sendfileII:
    Ported to BSD Unix.  Added a new makefile, named makefile.bsd.
    To compile, type "make -f makefile.bsd".  Otherwise, everything is the
    same as on Solaris.  WMK 2/17/04.

    sendfileII:
    Added optional config command "-SendPause xxx" where xxx is a time in
    milliseconds (default = 0). sendfileII will sleep SendPause millseconds
    before trying to open a file for shipping.  This gives file writers of
    unknown behavior some time to finish writing and to close the file before
    sendfileII wisks it away. Windows fopen_excl() was supposed to keep us
    from opening a file that another process was using, but I don't think
    it's working the way we expected. Besides, Solaris never had the
    fopen_excl() option, so SendPause helps us there.  LDD 3/23/2006

    EWDB - Station Information:
    Modified the two stored procedures that handle the processing of SCNL
    from station list tools (stalist_XXX2ora) and automatic data (trace feed,
    automatic pick feed, strong motion, etc.).
    Modified the procedures to properly process the Location Code of the
    SCNL.  Prior to this, Location codes weren't properly being handled.
    Because this change is to SQL procedures and not C code, you must
    refresh the DB stored procedures by updating with the SQL scripts from
    "working".  (run ewdb_load_external_utils.sql from schema/sql_scripts).
    DK 02/17/04

    naqs2ew:
      Modified to produce TYPE_TRACEBUF2 messages to support location codes.
    Can optionally be configured to produce the original TYPE_TRACEBUF msg.
    New config file commands: OutputMsgType (optional) and RequestChanSCNL.
    See sample configuration file for details. LDD 4/14/2004
      Modified to output all packets (regardless of time-order) to Earthworm
    when RequestChanSCNL "delay" is -1.  This will allow out-of-chronological
    order data and possibly duplicate data into the EW system. For delay>=0,
    out-of-order packets will be ignored (previous behavior). LDD 11/22/2005
      Added new command "RepackageNmx" (optional) to control how Nmx packets
    are repackaged into Earthworm messages.  If set to 1, naqs2ew will create
    one EW msg from each Nmx packet. If the Nmx packet contains more than
    MaxSamplePerMsg samples, multiple EW msgs will be created. The entire Nmx
    packet will be converted immediately.  If set to 2 (the default), naqs2ew
    will repackage Nmx packets into 1-second EW msgs.  If an Nmx packet
    contains more or less than 1-second of data, some samples will be buffered
    until the receipt of the next Nmx packet for that channel.  Some shorter
    EW messages will be generated if time tears are present.  LDD 11/23/2005
      Fixed bug in how compression bits of raw Nmx compressed data packets
    are interpreted in unpack_tsdata_bundle() of nmxp_packet.c. Now, if both
    compression bits are 0, it is interpreted as "this data set contains no data"
    and the 4-byte data set is ignored. Previously, if both compression bits
    were 0, it was (mis)intrepreted to mean that compression was not used and
    that the data set contained a single non-differenced data value. This bug
    would have added extra bogus samples to the output, but probably only when
    a data packet was partially full. Since I can't think of a reason why a
    datalogger would not fill each data packet fully, I'm guessing that this
    bug was very rarely, if ever, encountered. LDD 1/4/2006

    reftek2ew:
    Modified to produce TYPE_TRACEBUF2 messages to support location codes.
    Config command "SCNFile" was replaced by the "SCNLFile" command.
    Location code was added to the SCNLFile (which maps between
    DAS#,stream,channel and SCNL,pin) as the 7th of 8 fields on each line.
    Added a new config file command "SendUnknownChan" to control whether
    channels not listed in the SCNLFile are written as TYPE_TRACEBUF2 msgs.
    If SendUnknownChan is non-zero, reftek2ew makes up the SCNL as follows:
    Station is the DAS serial number, component is "Cxx" where xx is the
    channel number from the DAS, network is "Sy" where y is the stream number
    from the DAS, and location code is "--" (the NULL location).
    If SendUnknownChan is zero, data from channels not listed in SCNLFile
    is ignored.  LDD 5/25/2004

    compress_UA:
    Modified to produce TYPE_TRACE2_COMP_UA messages when handling
    TYPE_TRACEBUF2 messages as input. Compress_UA can still take TYPE_TRACEBUF
    packets as input and will produce TYPE_TRACE_COMP_UA messages as output.
    Eliminated "GetWavesFrom" command and replaced it with two new commands:
    "GetLogo" to supply the logos to process and "CompressSCNL" to supply
    the list of channels to process.  If handling TYPE_TRACEBUF messages,
    the location code in the CompressSCNL command is ignored, but it still
    must be provided.  LDD 4/16/2004

    decompress_UA:
    Modified to work on both TYPE_TRACE2_COMP_UA and TYPE_TRACE_COMP_UA msgs.
    Produces TYPE_TRACEBUF2 messages if input is TYPE_TRACE2_COMP_UA.
    Produces TYPE_TRACEBUF messages is input is TYPE_TRACE_COMP_UA.
    Eliminated "GetWavesFrom" command and replaced it with "GetLogo" command.
    LDD 4/16/2004

    decimate:
    Modified to work on either TYPE_TRACEBUF and/or TYPE_TRACEBUF2 messages
    to support the addition of location codes to network processing.
    Output message will be of same type as input message.  Changed the
    GetWavesFrom command to require a third argument specifying the input
    message type (must be either TYPE_TRACEBUF or TYPE_TRACEBUF2). If the
    input message type is TYPE_TRACEBUF, location codes are ignored. Replaced
    the GetSCN command with GetSCNL to support the addition of location codes.
    If the GetSCN command is used, the input and output location codes are
    set to "--".  LDD 5/11/2004

    sniffring:
    Modified so it does not attempt to print the contents of two new binary
    message types: TYPE_TRACEBUF2 and TYPE_TRACE2_COMP_UA.  LDD 4/16/2004

    export_actv, export_scn_actv:
    Moved source code from data_exchange/export_actv into data_exchange/export
    to avoid duplication of the supporting export filtering code.  The versions
    of the filters in export_actv had not had bug fixes in quite a while and
    were not location-code compliant.  LDD 4/20/2004

    export_scn, export_scn_pri, export_scn_actv:
    Modified the scnfilter code to include location code as well.  Replaced
    Send_scn and Send_scn_remap config commands with Send_scnl and Send_scnl_remap.
    If old commands are used, the location code will be set to * (wildcard).
    Modified to work with all the new location-code friendly Earthworm messages:
    TYPE_TRACEBUF2, TYPE_TRACE2_COMP_UA, TYPE_PICK_SCNL and TYPE_CODA_SCNL.
    Still works with old format messages.  LDD 4/21/2004

    export_generic,export_scn
    Added logging under "Verbose" mode concerning the queue status of each
    message to be exported. This will generate VERY LARGE log files, but
    could be useful in debugging.  LDD 3/23/2005

    write_cta:
    Program now reads TYPE_TRACEBUF and TYPE_TRACEBUF2 messages from the
    transport ring.  All TYPE_TRACEBUF messages are converted to TYPE_TRACEBUF2,
    before writing to tape.  Tape files now begin with "wu" (instead of "wt"),
    to indicate that they contain TYPE_TRACEBUF2 messages.  WMK 5/11/04

    read_cta:
    Program now reads tape files whose names begin with "wt" and "wu".
    "wu" files contain TYPE_TRACEBUF2 messages.  WMK 5/11/04

    cta2cusp:
    Cosmetic changes.  Program will process cta files beginning with wt or wu.
    Only old version triglist messages, without location code, will work.
    If there are multiple channels with the same SCN, they will be interleaved
    in the file sent to CUSP.  This is bad.  WMK 5/12/04

    tankplayer:
    Added support for TypeTraceBuf2, which was missing from the get_time function
    that is used to determine the time of the packet from the trace header.
    Changed the program's behavior when Tracebuf2 packets are encountered with
    VERSION fields that don't match those compiled into the program.  Previously
    the program always quit at the first sign of a tracebuf with a mismatched version
    number.  Now depending on the value of the IgnoreTBVersionNumbers config command,
    the program attempts to parse and either play or skip the message based on
    the value of the command.  (TRUE = play, FALSE= ignore).
    Added a log message when tankplayer comes across a large delay between packets.
    Modified the sleep code that executes between packets, so that it sleeps
    in small intervals and continues to issue heartbeats even during a large gap.
    Added additional debugging info for dealing with problems encountered in tracebuf files.
    DK 2006/03/09

    tankplayer:
    odified to read TYPE_TRACEBUF2 files in addition to the original file
    types (TYPE_TRACEBUF and TYPE_ADBUF).  LDD 5/21/2004

    remux_tbuf:
    Added WaveMsg2MakeLocal() call to report and filter out tracebufs
    with headers that don't checksum.
    Replaced fprintf(stdout) commands with logit().
    Added a progress indicator that prints a ".' to the screen each time
    100 tracebufs have been processed.
    DK 2006/03/09

    time_ew.c (timegm_ew())
    Fixed bugs in timegm_ew() that appeared on machines not set to UTC timezone.
    DK 07/12/2004

    import_generic:
      Moved the generation of Earthworm TYPE_HEARTBEAT messages out of the
    Heartbeat thread and into the main() thread. EW heartbeats will be generated
    in both the "connect to server" loop and the main working loop. This means
    that import will keep beating its EW heart when its export server becomes
    inaccessible, avoiding unnecessary restarts by statmgr/startstop. The
    former Heartbeat thread was renamed the SocketHeartbeat thread because
    its sole job is to write heartbeats (alive strings) to the socket. Also
    changed names of variables related to the socket heartbeat thread to
    avoid confusion.  LDD 3/15/2005
      Restructured the "connect to server" loop to be easier to follow and
    reworded the messages logged during connection attempts. LDD 3/17/2005

    import_gen_pasv:
    Incorporated Richard Godbee's bug fixes in the accept_ew loop (fixed
    mis-placed end-while bracket, uninitialized variables) and increased
    the length of the RingName and MyModName variables. Reformatted the
    entire file with proper, readable indenting, changed accept_ew timeout
    to HeartBeatInt (had been hard-coded to 9 seconds), added inter-connection
    time interval to logging, generally cleaned up comments. LDD 4/13/2006

    Most Modules:
      Linux Makefiles (makefile.ux) have been added to a number of modules and
    in some cases _LINUX compile directives have been added into the code. The
    list of codes to which this has been done will be provided as a separate
    note. 8/11/2005 Paul Friberg

    startstop_nt:
    Added in restart command to Interactive() function. This nice modification
    was provided by Murray McGowan. Tested and added by Paul Friberg 9/7/2005

    startstop_unix/startstop_solaris:
    Added in the same restart command as above. It's a nice feature to have. (9/7/2005)

    CHANGES TO CONFIGURATION FILES and DESCRIPTOR FILES:
    ****************************************************

    earthworm.d: Added this earthworm type to allow sending a reconfigure
    command through rings.
    Message  TYPE_RECONFIG	     112

    statmgr.d: Up to 10 pagegroup commands are now allowed (at least one is
    required).  LDD 2006/4/25

    *.desc:
    Modified descriptor files to allow optional module-specific settings for
    pagegroup (up to 10) and mail (up to 10) recipients. Any "pagegroup" or
    "mail" commands in a descriptor file override the statmgr config settings.
    This will allow the user to fine-tune on a per-module basis the recipients
    of various Earthworm notifications.  LDD 2006/4/25

    shakemapfeed.d: Added new optional command, SMQueryMethod, to control how SM
    data is requested from the DBMS. Default behavior (SMQueryMethod 0) is original
    2-stage query (get all SM data associated with this eventid, then get all
    UNassociated SM data in a space/time box). If SMQueryMethod is non-zero,
    shakemapfeed will request all SM data in a space/time box. This will return
    SM data associated with this event, SM data associated with other events,
    and UNassociated SM data.
      Regardless of query method, post-query filtering will be performed on eventid,
    external eventid, and external author.  SM data associated with a different
    eventid but with the same author will be rejected.  Data with a different
    author will be allowed - this is most likely data imported from another
    network and its eventids are meaningless in our DBMS.  LDD 02/13/2004

    shakemapfeed.d: New command "ScheduleFeed <minutes(float) after receiving event>"
    sets the shakemap feeding schedule. Up to 20 ScheduleFeed commands are
    allowed, setting one time per command.  Auto-feeds will continue at the
    last ScheduleFeed interval until UpdateDuration minutes after the event
    origin time. ScheduleFeed replaces the original DelayFirstFeed and UpdateInterval
    commands. These original commands are still accepted and will set up
    the auto-feed schedule in the original manner in the absence of ScheduleFeed
    commands.  LDD 3/4/2004

    naqs2ew.d: Two new commands to support location code addition:
    "OutputMsgType " to choose output format.
       If the OutputMsgType command is omitted, naqs2ew will produce
       TYPE_TRACEBUF2 messages by default.
    "RequestChanSCNL" replaces the "RequestChannel" command. It has all the
       same arguments with the addition of the  argument.
       LDD 4/14/2004

    binder_ew.d:
    Two new optional commands:
    "pick_fifo_length " set the length of the pick FIFO (default=1000)
    "quake_fifo_length " sets the length of the quake FIFO (default=100).
    If a command is omitted, the corresponding fifo will be set to the previous
    hardcoded length.  LDD 2/9/2005

    eqproc.d
    Four new optional commands. If any of these commands is omitted, the
    corresponding parameter will be set to its previous hardcoded value.
    "pick_fifo_length " set the length of the pick FIFO (default=1000)
    "quake_fifo_length " sets the length of the quake FIFO (default=100).
    For proper event reporting, eqproc's pick/quake FIFO lengths must be
    greater than or equal to binder's pick/quake FIFO lengths!
    "HeartbeatInt " sets the interval (seconds) between TYPE_HEARTBEAT
    messages (default=0.3*tReport).
    "rpt_check" " sets the interval (seconds) at which the quake FIFO
    will be inspected to see if it's time to send an event to downstream
    modules (default=0.3*tReport).
    The parameter tReport is set with the 'rpt_dwell' command (default=30s).
    LDD 3/11/2005

    eqprelim.d
    Added two optional commands. If either of these commands is omitted, the
    corresponding parameter will be set to its previous hardcoded value.
    "pick_fifo_length " set the length of the pick FIFO (default=1000)
    "quake_fifo_length " sets the length of the quake FIFO (default=100).
    For proper event reporting, eqprelim's pick/quake FIFO lengths must be
    greater than or equal to binder's pick/quake FIFO lengths!
    LDD 3/11/2005

    compress_UA.d:
    Eliminated "GetWavesFrom" command and replaced it with two new commands:
    "GetLogo   "
     Inst_id and/or Mod_id fields can be wildcards, but msg_type field must
     be either TYPE_TRACEBUF or TYPE_TRACEBUF2. Multiple GetLogo commands may
     be supplied (no limit on number).
    "CompressSCNL    "
     The wildcard character '*' (without quotes) can be used in any of
     the fields.  Use as many CompressSCNL commands as needed to define the
     list of channels to be processed.  If input is TYPE_TRACEBUF, the
     field will be ignored, but it must still be provided.
     LDD 4/16/2004

    decompress_UA.d:
    Eliminated "GetWavesFrom" command and replaced it with new command:
    "GetLogo   "
     Inst_id and/or Mod_id fields can be wildcards, but msg_type field must
     be either TYPE_TRACE_COMP_UA or TYPE_TRACE2_COMP_UA. Multiple GetLogo
     commands may be supplied (no limit on number).
    LDD 4/16/2004

    decimate.d:
    GetWavesFrom: added a third requires argument specifying the input
    message type.  Only valid messages types are TYPE_TRACEBUF and TYPE_TRACEBUF2.
    Replaced the GetSCN command with GetSCNL to support the addition of location
    codes.  GetSCNL requires 8 arguments, input SCNL and output SCNL. No wildcards
    are permitted.  LDD 5/11/2004

    export_scn*.d:
    Added two new commands, Send_scnl and Send_scnl_remap, to implement location
    code filtering.  If old commands (Send_scn and Send_scn_remap) are used,
    the location code is set to * (wildcard). LDD 4/21/2004

    wave_serverV:
    Modified behavior so that wave_server does not Abort On A Single Tank Failure,
    unless the AbortOnSingleTankFailure flag is set in config file.
    (This was the documented behavior).

    wave_serverV:
    Wave server now limits tank sizes to 1GB.  This applies only to NEW tanks, not
    existing tankfiles.
    The default behavior is for wave server to EXIT if it comes across a tank in the
    config file that is >= 1GB.
    If the "TruncateTanksTo1GBAndContinue" command is set in the config file, then
    wave server will trunctate any >= 1GB tank files to just under 1GB, and continue
    normal operation.
    This was done to prevent users from creating unsafe large tanks, after a bug was
    discovered that limits the safe wave server tank size to ~1GB.
    DK 2005/03/17

    Added code to check the return value from call to WaveMsg2MakeLocal(),
    and reject packets for which WaveMsg2MakeLocal() reported and error.
    Updated the wave_serverV version and timestamp.  This will cause
    wave_serverV to filter out packets with header issues that weren't previously
    filtered out before.
    Fixed a bug where wave_serverV would filter out packets that contained only
    one sample.
    DK 2006/03/27

    wave_serverV / wave_viewer / ws_clientII.c:
    Modified wave_server protocol slightly to better differentiate between SCN vs. SCNL
    clients and servers.  New wave_server clients should be backwards compatible with
    previous SCNL wave_servers, but the new wave_serverV is not backwards compatible
    with any clients.
    The new wave_viewer works with ALL wave_servers (SCN, old SCNL, new SCNL), and
    the new ws_clientII library works with ALL SCNL wave_servers.
    DK 2005/04/22

    wave_serverV / wave_viewer / ws_clientII.c:
    Fixed bug in wave_server (server_thread.c ParseMsg()) that was incorrectly reading
    the Ascii FILL value from the "endtime" field instead of the "fill" field.
    This fix only affects ascii wave_server clients on gappy channels.
    Fixed more bugs in the ASCII protocol logic between ws_clientII and wave_serverV.
    DK 2005/09/07

    ringtocoax:
    Changed tport_getmsg to tport_copyfrom so that it can distinguish missed messages
    (overlapped in ring) from sequence gaps in the ring. This can be useful for
    fine-tuning the BurstCount and BurstInterval configuration settings.
    LDD 2005/4/8

    localmag:
    Does not compile under latest release of earthworm (needs to be SCNL'ized). It
    will compile with earlier versions however and 3 new options have been
    added in: useMedian, minStationsMl, require2Horizontals
    which are all explained in the localmag/Doc/localmag_cmd.html file.
    The program now has a version number to distinguish different released versions.
    Upgraded as per requests from Univ of Utah and HVO on 8/10/2005 by Paul Friberg (PAF)
    I upgraded localmag to use SCNL now and tested it at Utah 3/01/2006 PAF

    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's  command).  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:
    *******************

    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