    Release Notes:  Earthworm Version "v6.0"

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

    db_cleanup: New database related module which allows the users to
      clean up the events in the DB. It takes four important parameters:
      First two specify how many days ago cleanup should start and
      how many days to clean up. For example, specifying 7 and 2 means
      that two days worth of events will be cleaned up starting with
      the events 7 days ago. Next two options specify the type of
      cleanup. The user can delete all or just the trace data of an
      event, and the user can save the trace in SAC format.  This program
      is intended to run out of cron so that it can automatically clean
      up the old stuff out of the database, keeping its tables
      manageable. LV 10/25/2000

    db_cleanup2: Just like db_cleanup only more options.  You can now archive/delete
    by time/lat&lon/magnitude.  You can also delete unassociated data.

    reaper:  Just like db_cleanup2, except that it has only one option.  You give it
    a DayOfReckoning, and it deletes everything in the DB older than that date/time.
    It saves nothing.

    pidpau: This is a command-line program with which one can request the termination
    of a single Earthworm program.  It works by setting the transport flag in all
    transport regions listed in startstop's config file to the value given on
    the command-line.  The value given is the processid that you want to shut
    down.    Usage: pidpau
    Most earthworm modules have been modified to shut down when the trasnport
    flag is set to TERMINATE or their own processid.
    LDD 5/11/2001

    makeTTTable:
    This is the Ray Buland travel time calculator. It's Solaris-specific Fortran
    code. The main program was modified by Alex to accept command-line input
    specifying the resolution and range of the table. The output is an ascii file,
    suitable for reading with Carl's kom routines. The phases listed in the file are
    as per Harley's requirements for getting global snippets containing the time
    interval of interest. Such tables are currently used by archiving/usnsn_loc2trig
    and oracle/apps/src/arc2trigII.
    	There's a rumor that someone has ported Ray's code to C. It would be good
    to replace this with that.
    Alex June 5 2001.

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

scream2ew.c

Added a new optional parameter SleepInterval to control the number of milliseconds scream2ew sleeps after each message processing loop, as requested by Murray McGowan. John Patton 8/6/2001

    ora_trace_save.c
    Added initialization of the menu list .head and .tail =NULL as per Carol Bryant's
    discovery. Alex 9/29/2000

    Replaced queue_max_size.o with mem_circ_queue.o in
    the following makefiles:
      data_exchange/vdl/SCRIPTS/makefile.sol_ew
      display/sgram/makefile.sol
      seismic_processing/eqbuf/makefile.sol
      seismic_processing/eqbuf/makefile.nt
    DavidK 2001/04/12

    makefile.sol for many modules:
    Removed compilation flags -D_SPARC and -D_SOLARIS from CFLAGS= lines.
    These flags should be set in a user's earthworm environment setup file,
    ew_sol_sparc.cmd or ew_sol_intel.cmd.  The existence of these flags in the
    makefile was causing trouble for anyone who wanted to compile for an
    Intel Solaris platform. In carlstatrig, these flags caused 4-byte integer
    trace data to be misinterpreted as float data, resulting in NaN for most
    triggering variables. Makefile.sol was changed for the following modules:
     carlstatrig
     eqfilter
     import_generic
     q2ew
     sac2hypo
     sm_file2ring
     sm_reftek2ew
     template
     trig2disk
     waveman2disk
    LDD 1/31/2001

    oracle/.../libsrc/util/get_db_event_info.c
    Added new GetDBEventInfo_Super() function.  (Sorry about the name.)
    GetDBEventInfo_Super() is the same as GetDBEventInfo() except that it
    allows the caller to select what types of information they want
    retrieved for an event.  They types are defined in
    EW_VERSION/include/db_event_info.h, and are bitwise OR'd together
    to form an integer flags value.  Now one program can use the call to
    get everything for an event, and another can still use the call to
    just get summary and arrival info, without taking the performance
    hit of retrieving all event data.
    Also added a function Set_GetDBEventInfo_Debug() that turns debugging
    on/off for GetDBEventInfo_Super(). DK 12/20/00

    oracle/.../eqparam2html
    Changed the links that appear at the bottom of the eqparams web page,
    (used to view record sections[waveforms]) from being hard coded to
    being config file configurable.  See eqparam2html.d in the
    eqparam2html source directory for more info. DK 12/20/00

    oracle/.../getlist and getimage
    Changed getimage to work on NT.  Previously getimage did not work on
    NT, due to a Pipe problem with Apache on NT.  Apache bug was fixed
    as of v1.3 (fix verified on v1.3.14).  Changed getlist to use getimage
    on NT.  These changes SHOULD not affect the operation of either program
    on Solaris.  DK 01/03/01

    oracle/.../ora2rsec_gif
    Fixed a bug where non 8-byte aligned TRACEBUF packets within a
    DB Snippet buffer, would cause the program to crash.  (Tested
    with 179 sample - 780 byte TRACEBUF packets from SRU BHZ UU).
    Added code to remove (primitively) the DC Offset from the
    record section displays.  DK 02/20/01

    stalist_hinv2ora: Fixed a bug in reading elevation from the file. Had
    been reading 1 char too many, causing elevations to be an order of
    magnitude too large.  Also added checks on the north-south latitude
    flag and east-west longitude flag, so that the sign of the coordinates
    is correct.  In a California-centric manner, we assume that if these
    flags are left blank, the coordinates are N and W (this is the
    hypoinverse default).
      Also changed code in ewdb_api_CreateOrAlterExternalStation.c
    so that station coordinates are inserted into the DBMS with 6 decimal
    places (had been truncated to 2 decimal places). LDD 3/19/2001

    shakemapfeed: added the option to write XML files for shakemap2; previously
    only shakemap1 file format was supported. Added the option to read a
    "MappingFile" which serves as a lookup table for station long names,
    instrument types and agency names. These descriptive phases are added to the
    XML to improve human readability; they are not required to make shakemaps.
    Changed to use the standard macros for RingName length and the other earthworm
    logo lookup strings.  PNL 3/22/2001

    k2ew: Changes to logging only.  Several messages that logged at debug level 0
    were moved to debug level 1.  These source files were effected:
    k2ewmain.c  k2pktio.c  outptthrd.c  k2misc.c  k2c_tcp.c
    WMK  5/7/01

    k2ew: Minor logging changes made to function k2p_recv_packet.  WMK 5/14/01

    k2ew: Program now optionally writes the entire K2 header to a disk file.
    Name of file is specified by a new optional config parameter named
    "HeaderFile".  WMK 5/22/01

    statmgr: Statmgr can now read nested descriptor files.  To do so, put a line
    like "@common.desc" in the descriptor file.  WMK 5/10/01

    include/transport.h: Changed SHM_HEAD.flag from short to int so that we can
    use it to store processids.  This is in preparation for a graceful restart
    mechanism, whereby if tport_getflag returns either TERMINATE or MyProcessId,
    the module will exit gracefully.  Also changed tport_putflag's flag value
    argument from short to int.
    libsrc/solaris/transport.c
    libsrc/winnt/transport.c: Changed tport_putflag's flag value argument from
    a short to an int.  LDD 5/4/2001

    startstop_nt: Finally found/fixed the bug that was causing startstop to crash
    when it failed to create one of its child processes (bug was in a logit call
    where it tried to print an integer with %s instead of %d).  Now it logs the
    failure along with troubleshooting tips, then shuts down, terminating
    any child processes that it had succeeded in starting (no more headless
    worms on NT). LDD 6/8/2001

    startstop_nt/startstop.c
    startstop_solaris/startstop.c: Changed RestartChild() to give the child
    process a chance to shut down gracefully before killing it forcefully.
    Startstop sets all transport flags (tport_putflag)
    to the processid that should restart.  If the child hasn't shut down
    after KillDelay seconds, startstop will kill the child and restart it.
    LDD 5/7/2001

    Graceful shutdowns - many modules:
    Modules preceded by 'x' in the list below have been upgraded to shut down
    gracefully if the transport flag is set to TERMINATE or its own processid.
    Previously, modules only shut down on a TERMINATE flag. Combined with the
    change to startstop's restart procedure, this means that only modules
    that are truly hung will be forcefully killed by startstop.
    All modules that are functioning properly will have a chance to clean
    up, possibly even saving state, before shutting down and being restarted.

    Standard Earthworm Modules
    --------------------------
    archiving:
    x menlo_report
      tankplayer
    x trig2disk
    x usnsn_loc2trig
    x wave_serverV
      waveman2disk

    data_exchange:
    x coaxtoring
    x export
    x export_actv
    x import_generic
      import_ida
    x import_pasv
      liss
    x rcv
      rcv-debug
    x ringdup
    x ringtocoax
    x vdl

    data_sources:
    x adsend
      adsend_mitch
    x k2ew
    x naqs2ew
    x q2ew
      reboot_mss
    x reboot_mss_ew
    x reftek2ew
    x scream2ew
      usnsn_loc2ew

    diagnostic_tools:
      file2ring
    x gaplist
      getmenu
      putterNSN
      sniffring
      sniffwave
    x template

    display:
    x ew2seisvole
    x heli_ewII
    x sgram
      wave_viewer

    grab_bag:
    x arc2trig
      comment2html
      getter
    x pick_recorder
      putter
      sac2hypo

    reporting:
      copystatus
    x diskmgr
    x statmgr

    seismic_processing:
    x binder_ew
    x carlstatrig
    x carlsubtrig
    x compress_UA
    x decimate
    x decompress_UA
      eqbuf
      eqcoda
    x eqfilter
    x eqprelim
    x eqproc
      eqverify
    x evansassoc
    x evanstrig
    x ew2rsam
    x ew2ssam
    x fir
      glass
    x gmew
      hyp2000
      hyp2000_mgr
    x localmag
    x pick_ew

    strong_motion:
    x sm_file2ew
      sm_file2ewI
      sm_file2ring
      sm_reftek2ew
      test_sm

    system_control:
      pau
      restart
      startstop_nt
      startstop_solaris
      status

    Oracle Earthworm Modules
    ------------------------
    oracle/apps/src:
      alarms
    x arc2trigII
      archive
      db_cleanup
      dewey
      eqparam2html
      frankel
      get_transfunc
      getimage
      getlist
      hypo2ora
      mag2ora
      nsn_pz2ora
      ora2rsec_gif
      ora2sac
      ora2sactarfile
      ora2snippet_gif
    x ora_trace_fetch
    x ora_trace_req
    x ora_trace_save
    x orareport
      review
      scn2pz
    x shakemapfeed
      shakemapfeedI
    x sm_ew2ora
      smdbtest
      stainfo
      stalist_hinv2ora
      stalist_shkmap2ora
      stalist_usnsn2ora
    x usnsn_loc2ora
      wvdbtest

    Menlo Modules
    -------------
    Contrib/Menlo/src:
      bdsn2trace
      cleandir
    x condenselogo
      cta
      cta2cusp
    x cuspfeeder
      cvarc
      dumpevent
      eqwaves
      getdst
      getdst2
      getevent
      getfile
    x getqdds
      heli1
      heli2go
      heli4
    x import_ms
      k2pipe
      ls_cta
      makehbfile
    x msubl
      qa2tracebuf
      read_cta
      remux_tbuf
      send_cta
    x sendarc
      sendfile
      sendfile_terra
      sgram
      shake_feeder
    x sniff_trace
    x write_cta
    x wsv_test

    Contrib/Menlo/src/pager:
      sendhb
      sendmsg
    x telafeeder
      telalert
      telapage

    End of graceful shutdown list. LDD 5/11/2001

    ewdb_api_GetidChansFromSCNLT()   - sm_ew2ora
    Fixed a memory leak in ewdb_api_GetidChansFromSCNLT().  This applies to all
    programs and modules that utilize this call, including ones that call other
    ewdb_api_XXX() functions that utilize this call.  sm_ew2ora is the only
    program noticably affected by this change.  It was leaking 57kb per message
    due to the bug, and could quickly swell to 30MB+ after one event.
    DavidK 05/25/2001

    ewdb_api_PutSMMessage() - sm_ew2ora
    Changed the code so that messages that come from channels whose SCNL does
    not correlate to a pre-existing DB channel(idchan) with a Lat/Lon, are
    no longer stuffed into the DB.  The message is instead logged, with a
    warning about that it was not inserted.  The function now returns
    EWDB_RETURN_WARNING when this happens.  Note:  this has the implication
    that station lists for strong motion instruments must be completely loaded
    into the DB before attempting to insert messages.  The DB will no longer
    handle strong motion instruments that it has never heard of before.
    Davidk 2001/07/26

    libsrc/util/rw_mag.c, include/rw_mag.h
    Changed ML_INFO struct to MAG_CHAN_INFO struct to make it more generic.
    This structure and rw_mag should now be able to handle channel info for
    most types fo magnitudes; moment magnitude is one obvious exception.
    Removed "M0" (there is no such thing) and added "Mwp" (scalar moment
    magnitude) to the table of known mag types.
    PNL, 5/26/2001

    localmag: slight changes to handle the revised rw_mag routines.
    PNL 5/26/2001

    /libsrc/util/geo_to_km.c: fixed minor error in value of PI. Alex 6/6/1

    vdl: Reinstated feed_vdl_ew.c file from v4.1 (in v5.0,v5.1,v5.2, we had mistakenly
    been using feed_vdl_ew.c from v3.9P).  Also made changes in feed_vdl_ew.c to
    use MyPid in heartbeats, to terminate if tport_getflag returns MyPid or TERMINATE,
    to use configuration file name in call to logit_init().  LDD 6/6/01

    arc2trigII: Fixed value of PI. PNL 6/7/01

    localmag: changed single transport ring to and input and an output ring.
    Added ability to read multiple getEventsFrom commands; fixed handling of
    wave_servers in traceSource command. Fixed memory leak in endEvent(). Added
    test for SAC files to ensure they contain trace data for the desired time.
    New config file requred; see below. PNL 6/10/01

    gmew: changed single transport ring to and input and an output ring.
    Added ability to read multiple getEventsFrom commands; fixed handling of
    wave_servers in traceSource command. Fixed memory leak in endEvent().
    New config file requred; see below. PNL 6/10/01

    naqs2ew: changed to always produce one-second TYPE_TRACEBUF messages
    when possible.  Shorter messages will be produced if the sample rate
    exceeds the MaxSamplePerMsg parameter, or if a change in sample rate,
    a data gap or overlap is detected. If a packet from NaqsServer ends
    with a fractional second's worth of data, naqs2ew will buffer that
    data until the next packet for that channel is received. LDD 6/18/2001
      Reorganized code to allow sharing of source files between different
    NaqsServer clients.  Created naqschassis.c which handles the connection
    to the server, heartbeats, etc, and kept all waveform-specific code
    in naqs2ew.c.  LDD 7/19/2001

    wave_serverV:  Moved logging
    statement(_writeTankSummary: Warning: no data in tank) inside
    a DEBUG conditional, so that it would not cause HUGE log files to be
    generated under normal(HEAVY) operations where multiple tanks were
    not being fed data.  This fix was performed due to problems with a
    wave_server in Golden that was generating 4GB logfiles in a single day.
    DavidK 06/18/2001

    startstop.c (startstop_nt)
    Modified the code so that statmgr will always be started first (if present), and
    will wait a user defined number of seconds before starting any other modules
    (defaults to 1 second)  This was to repair an intermittent error where a module
    could be started, and die before statmgr was alive.  This prevented statmgr
    from sending a restart request, since the first heartbeat was lost.
    John Patton 6/28/2001

    localmag and gmew:
    Fixed the loop controls after a failed wave_server connection. PNL, 7/7/01

    startstop.c (startstop_solaris)
    Modified the code so that statmgr will always be started first (if present), and
    will wait a user defined number of seconds before starting any other modules
    (defaults to 1 second)  This was to repair an intermittent error where a module
    could be started, and die before statmgr was alive.  This prevented statmgr
    from sending a restart request, since the first heartbeat was lost.  Also
    modified code so that when startstop failed to start a module, it printed
    out helpful error messages, and exited cleanly.
    John Patton 7/16/2001

    gmew:
    Fixed bug that prevented XML files from being written. Pointers to EVENT and
    GMPARAMS structures were being passed into getGMFromTrace(); the GMPARAMS
    struct got corrupted as soon as getGMFromTrace() was entered - I don't know
    why. To fix it, I changed XMLDir, TempDir, and MappingFile from string arrays
    to string pointers on GMPARAMS. Then gm_config.c and gm_util.c were changed to
    support these string pointers. PNL, 7/18/01

    wave_viewer: Added logic to improve drawing, so that there are not so
    many artificial gaps.  Fixed bug in indexing logic that was causing
    datapoints to be shifted right and gaps to be added for data with
    sloppy timestamps.  New version is v1.24.
    DavidK 08/08/2001

    K2ew:   Station name remapping:  added new directive to the .d
            file to allow the station name to be specified there. An
            example directive is:  StationID LAX
            The purpose is to rename the station if the K2's STNID needs
            to be something different (for legacy data purposes).
    2001-03-22  Paul Friberg <p.friberg@isti.com>

    k2ew  Version 2.20:  Improved handling of resend
             requests (more focus on oldest waiting packet); added commands
             "MaxBlkResends", "MaxReqPending", "ResumeReqVal",  "WaitResendVal",
             "RestartComm"; improved debug log output messages; added logging of
             K2 channel names; changed "# of packets lost" value so that it is
             only the total after a restart (to be consistent with the "# of
             packets received OK" total); added "Program start time", "# of
             packet retries", "Packet error rating" and "Time of last output
             seq err" to the summary listings; added logging of "in-process"
             summary listing at each status output interval.
    2001-07-22  Eric Thomas <e.thomas@isti.com>

    k2ew Version 2.22:  Changed default value for 'MaxReqPending' command
             from 10 to 6 (as per recommendation of Dennis Pumphrey).
    2001-07-23  Eric Thomas <e.thomas@isti.com>

    k2ew Version 2.23:  Added "ChannelNames" and "InvPolFlags" parameters.
    2001-08-07  Eric Thomas <e.thomas@isti.com>

    localmag, gmew:
    Modified error code handling so that localmag no longer exits when it
    receives an error from the last wave server in its list.  Program will
    now continue even if there are NO AVAILABLE wave servers. DK 08/01/01

    trig2disk:
    Modified error code handling so that trig2disk no longer exits when it
    receives an error from a wave server in its list.  Program will
    now continue even if there are NO AVAILABLE wave servers.  This fix
    was not super-clean and may have unknowingly changed the behavior of
    handling other errors.  DK 08/01/01

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

scream2ew.d:

Added optional command SleepInterval, to set the number of milliseconds scream2ew sleeps after each message processing loop, the default value is 100 ms. John Patton 8/6/2001

    eqparam2html:  Added WaveformLinks command, to allow the html links at
    the bottom of the eqparam2html page to be configurable via the config
    file. DK 12/20/00

    shakemapfeed.d:
    Added optional MappingFile command to support the new XML writer.
    PNL 3/22/2001

    k2ew: Program now optionally writes the entire K2 header to a disk file.
    Name of file is specified by a new optional config parameter named
    "HeaderFile".  WMK 5/22/01

    k2ew  Version 2.20:  Improved handling of resend
             requests (more focus on oldest waiting packet); added commands
             "MaxBlkResends", "MaxReqPending", "ResumeReqVal",  "WaitResendVal",
             "RestartComm"; improved debug log output messages; added logging of
             K2 channel names; changed "# of packets lost" value so that it is
             only the total after a restart (to be consistent with the "# of
             packets received OK" total); added "Program start time", "# of
             packet retries", "Packet error rating" and "Time of last output
             seq err" to the summary listings; added logging of "in-process"
             summary listing at each status output interval.
    2001-07-22  Eric Thomas <e.thomas@isti.com>

    k2ew Version 2.23:  Added "ChannelNames" and "InvPolFlags" parameters.
    2001-08-07  Eric Thomas <e.thomas@isti.com>

    K2ew:   Station name remapping:  added new directive to the .d
            file to allow the station name to be specified there. An
            example directive is:  StationID LAX
            The purpose is to rename the station if the K2's STNID needs
            to be something different (for legacy data purposes).
    2001-03-22  Paul Friberg <p.friberg@isti.com>

    localmag: changed single transport ring to and input and an output ring.
    Added ability to read multiple getEventsFrom commands; fixed handling of
    wave_servers in traceSource command. PNL 6/10/01

    gmew: changed single transport ring to and input and an output ring.
    Added ability to read multiple getEventsFrom commands; fixed handling of
    wave_servers in traceSource command. PNL 6/10/01

    startstop_nt: Added optional command "statmgrDelay" to set the number of seconds startstop
    waits after starting statmgr (if present).  This command should be placed
    after the KillDelay command, and before the first Process command.
    John Patton 6/28/2001

    startstop_sol: Added optional command "statmgrDelay" to set the number of seconds startstop
    waits after starting statmgr (if present).  This command should be placed
    after the KillDelay command, and before the first Process command.
    John Patton 7/16/2001

    KNOWN BUGS or DEFICIENCIES:
    **************************
    Failure of automatic restarts just after Earthworm startup (rare):
      Automatic restarts are accomplished by a coordinated effort of the
    statmgr and startstop processes. Statmgr should be the first module listed
    in startstop's configuration file in order for automatic restarts to work
    most effectively.
      Statmgr learns each module's processid from its heartbeat message. If a module stops
    beating its heart, statmgr will issue a TYPE_RESTART message containing the processid
    of the module that died.  Startstop watches for these TYPE_RESTART messages;
    when it receives one, it finds that processid in its list of child processes,
    then attempts to restart it.  So statmgr needs to get at least one heartbeat
    for a module before it can send a TYPE_RESTART message that startstop will
    be able to use.  If statmgr is not started before all other modules, it could
    in rare cases miss the one and only heartbeat from a terminal module.
    It would then send a restart message with a null processid and startstop
    wouldn't be able to find the child in its list. The dead module would have
    to be restarted manually (with the command-line program "restart") before
    auto-restarts would be functional for that module.  LDD 6/18/2001
    NOTE: The error above is now corrected by changes made to startstop.
    JMP 7/16/23001

    In import/export modules, there is a mistake in the way they are compiled.
    They should be compiled with "VOLATILE STATIC"; ask Alex for details.

    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.
    LDD 5/31/2000 Comments added to adsend.desc, but leave this warning here!

    statmgr: A space is needed between "tsec:" and the value.
    If it isn't there, things fail. (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

    ew2seisvole: on NT, exits with horrible crash when system is stopped.

     Wave_viewer will display fictitious 2 to 3 sample gaps when scrolling the
    display.
     This does not happen all of the time and is only visible when there are less
    than
     200 samples on the display (2 seconds of data for 100hz data.) DK 2000/06/01

     libsrc/util/putaway.c: there is no include file for the putaway routines,
      thus any errors in arguments passed to putaway routines are not checked
      by the compiler.   PNL 7/10/2000

    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: 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: 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/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

    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

    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

    usnsn_loc2ew:
    Reads from stdin into a buffer, but never checks for overflowing the
    buffer. This is especially bad since usnsn_loc2ew is run under to Unix
    inetd daemon, so anyone how connects to the socket for usnsn_loc2ew can
    cause it to crash, or worse.  PNL, 5/2/01

    usnsn_loc2trig:
    Reads a travel time table to estimate P and S arrivals. To pick a time before
    the P arrival for a given station, usnsn_loc2trig looks in the table for the
    next nearer distance and the next shallower depth (relative to the event
    location) to get the trigger start time for that station. It assumes that this
    time will be earlier than the P arrival time of the the event distance and
    depth. However, for most of the traveltime table, travel time decreases with
    increasing depth. For most of the table, the increase in time with distance
    makes up for the decrease in time with depth. But for distances beyond 165
    degrees this is not true: the time selected by usnsn_loc2trig will be AFTER
    the P arrival time, and that part of the trace will be missed. The same logic
    is applied for determining the end-of-trace time, suing the S
    wave. usnsn_loc2trig uses the next more distance and next deeper time for S
    arrival to get this end of time. Again, beyond 165 degrees, the assumption
    here is not valid. The trace end time will be earlier than the S arrival and
    the trace will be cut off too early.  PNL 5/2/01

    libsrc/utils/parse_usnsn:
    Has a memory leak: whenever it returns early with an error condition, the
    allocated memory in ParseNSNMsg is leaked. Since the size of the arrays
    is fixed (hard-coded) this memory leak could easily be avoided by simply
    declaring the array instead of allocating it.
    Also, the loop for parsing phase lines counts up to the number of "associated"
    phases as read from teh "nph" line of the message. Since this loop does not
    skip over phases that are marked as unused, the loop may end prematurely if
    any phases are so marked.  PNL 5/9/01

    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

    OTHER:
    **************************
    Earthworm DBMS Applications(oracle): linking:
    In order to build earthworm DBMS applications(ON A SOLARIS SYSTEM), a
    change must be made to an Oracle makefile (/opt/oracle/rdbms/lib/env_rdbms.mk)

    Go to the bottom of the file and comment out all lines in the file starting
    with the $(LIBCLNTSH) target definition, so that the file looks as below.
    The example provided is from Oracle8.

    #$(LIBCLNTSH): \
    #            ${ORACLE_HOME}/lib/libclient.a ${ORACLE_HOME}/lib/libsql.a \
    #            ${ORACLE_HOME}/lib/libnetv2.a ${ORACLE_HOME}/lib/libnttcp.a \
    #            ${ORACLE_HOME}/lib/libnetwork.a ${ORACLE_HOME}/lib/libncr.a \
    #            ${ORACLE_HOME}/lib/libcommon.a ${ORACLE_HOME}/lib/libgeneric.a \
    #            ${ORACLE_HOME}/lib/libmm.a ${ORACLE_HOME}/rdbms/lib/xaondy.o \
    #            ${ORACLE_HOME}/lib/libnlsrtl3.a ${ORACLE_HOME}/lib/libcore4.a \
    #            ${ORACLE_HOME}/lib/libepc.a
    # $(SILENT)$(ECHO) "Building client shared library libclntsh.so ..."
    # $(SILENT)$(ECHO) "Call script $$ORACLE_HOME/bin/genclntsh ..."
    # $(GENCLNTSH)
    # $(SILENT)$(ECHO) "Built $$ORACLE_HOME/lib/libclntsh.so ... DONE"

    Davidk 2001/05/24