History v101.6 since v101.5c

This is a reverse chronological listing of enhancements and bug fixes made since
SAC version 101.5c

Early 2013

  • Updated version to 101.6
  • UPDATE: all Using SAC HELP files
  • UPDATE: Made changes so that SAC could build/work with x86 Solaris 11
  • UPDATE: Removed legacy POSIX finctions
  • UPDATE: Disabled PNG and XFT for default builds
    - To turn on PNG: ./configure --enable-png
    - To turn on XFT: ./configure --enable-xft
  • UPDATE: Transition from CVS to SVN
    - seiscode.iris.washington.edu/projects/sac-dev
  • FEATURE: Fill postive and negative portions of seismograms
    See HELP LINE for details
    Tests added
  • FEATURE: New Command Parser
    Old behavior is availale using the "MATHOP OLD" command
    Behavior is the same as original parser, case-insensitive
    Inline math expression do not require spaces
    Numbers are recognized as numbers and stored as floating point value
    Inline variables are parsed correctly: %blackboard, &1,headervar, an
    Unexpected characters tested for after: if test, elseif test, else
    Routines in src/cpf now use this new parser
    Added arg_msg( str ) to print a caret(^) at the current token with a
    Allow for optional commas for sac_math and minimum/maximum
    Can only use numbers, sac_math, constants and variables as argum
    Changed cfmt("string$",#) to cfmt("string",#)
    Added lcchar_base() that returns a string at all costs (Original inp
    Replaced processline() with process_line()
    Removed process*() functions and get*args()
    Removed kmcom.kcom references
    Force mesage command to not shrink numbers
    Inline String functions have access to variables, file headers
    Reply function now works
    Uses new VARS subsystem
  • FEATURE: New Command MATHOP
    Controls whether Math Operators have a precedence
    Introduced for compatibility with parser in earlier versions.
    See help files for INLINE and MATHOP for details
  • FEATURE: New VARS subsystem
    Uses a set of hash tables for easy storage and retreival
    Strings are stored as strings, numbers stored as floating point valu
    Behavior is the same as the original VARS subsystem
    getbb all now outputs variables in alphabetical order
    Quoted Strings should now be either "stuff" or "stuff[EOL]
  • FEATURE: Modified -enable-debug to -g -Wall -Wextra
  • FEATURE: Add --enable-coverage and make coverage, requires lcov
  • FEATURE: SAC_DIE_ON_ERROR=1 will cause make check to stop when an error occur
    Default is to continue and do all tests
  • FEATURE: SACTESTS=testname will only do a single test [existed already]
  • FEATURE: Spaces are now allowed in filenames
    Removed kmdfm.kdflrq variable
    Removes need for kmdfm.kdflrq variable
    Removed cmdfm.nwfl variable (Number of waveforms to write)
    Removed kmdfm.kwfl vairbale (List of waveforms to write)
    If no data file list (DFL) is specified, the list is undefined.
    Filename now appears after time for Binary Operations Module
    Expand wildcards in filelists for SUDS files
    Expand wildcards in filelists for CSS and GSE files
  • FEATURE: Command parsing all moved to saccommands()
    including macros and ReadExecutePrintLoop
  • FEATURE: Revision of code to handle filenames with spaces
  • FEATURE: Commands are split on semicolons in main()
  • BUG FIX: t/sacio now uses only libsacio.a
  • BUG FIX: bell() added to libsacio.a
  • BUG FIX: Buffer overflow fixes in acc.c, lll.c, and calccontrlink.c
  • BUG FIX: Vertical alignment recognized in gettextjust
  • BUG FIX: Test zam now avoids sin(pi * n) due to different implementations
  • BUG FIX: Fix to externs not promoted to double
  • BUG FIX: Removed files, including src/coda/C_* zinfo, zmemad, copy, xwpr
    gc.h moved to sm_gc.h to avoid conflict with system installed gc.h (
    Many obsolete files removed, some were probably missed
  • BUG FIX: convcolorname() returns -1 if colorname not found
    Error handling in color improved
  • BUG FIX: GSE Files now recognize and parse the STA2 line
  • BUG FIX: Added multiple calls to free memory as the program exits
  • BUG FIX: FUNCGEN SINE results are different than older versions, numerical
  • BUG FIX: findcommand() compares string to full command names, not first 8
  • BUG FIX: xabout() fixes bug for Display Copyright
  • BUG FIX: msg() where processed commands had an extra ==>
  • BUG FIX: msg() where string is now initialized to NULL
  • BUG FIX: Moved bbfswap routines to vars/bbf.c
    Moved #defines values and struts to bbf.h
  • BUG FIX: Added memory of past files to ReadSpectral
  • BUG FIX: Added color_parse() and color_parse2() functions
    Parse a color number or color name
  • BUG FIX: Added string utilities
    - lstrip, rstrip, strip, strcut
  • UPDATE: In the Hilbert help file, a limitation of this application
    is described.
  • BUG FIX: Removed the faq help file because it was out of date and
    not very relevant
  • ENHANCE: Added a time-shift macro to the lowpass help file
  • BUG FIX: Corrected errors in KEVNM when there are > 8 characters
    - A. Kasahara
  • ENHANCE: More explicit error messages for input format errors in
    polezero file.
  • BUG FIX: FAP option in TRANSFER error when FAP file had freq(1) = 0.
    Fixed src/icm/fap.c so does not include zero frequency.
  • BUG FIX: Spectrogram output when changing ymin-ymax range
  • UPDATE: In saveimg, for PS and PDF, do not draw background fill if
    it is white. This means that the option alpha off must be used in
    programs like imagemagick/display.
  • UPDATE: Minor changes to the 10 linestyles so consistent among all
    graphics devices (previously, only four were available on some
    devices). Lengthened line segments in fileid location --
    previously too short to distinguish among them
  • UPDATE: Update to Readme.buildsac to incorporate information
    regarding memory checkers and changes to the source affecting the
    consistency of the testsuite when
    compiling with either gcc, clang, or optimized version of gcc or clang
    - gcc 4.2.1 (Apple Build 5666)
    - clang 3.1
  • UPDATE: Added FREE macro to check if memory is defined
  • UPDATE: Added upward-pointing vertical direction to file_format
    - C.Tape
  • UPDATE: Updates from v101.5c from A. Snoke
    - Documentation Updates
    - Help File Updates
    - pltext depended on uninitialized values:
    gdm/text.c -- initialize xdel and ydel
    textbox: make sure text strings exist before plotting and using
    set filename to the first display id, always
    - wsac3() changed to wsac0() is doc/examples/
    - File pointer did not get put back to the beginning of the file
    in PDF writing
    - Print warning for interpolate if new delta is greater than
    current delta and delta is even
    - If master file is the shorter length file, then a out of bound error
    occurs, possibly causing a segmentation fault. Fix by only copying
    the length of the file, not the maximum possible length of any file.
  • UPDATE: Added alternative system() command to not stall in valgrind
  • UPDATE: pytest.sh removed help from list of tests of valgrind is run
    pytest.py runs quietly with valgrind and suppresses X11 Font Errors
    Added valgrind.x11.suppress file to suppress X11 Font Errors
    pytest.py displays the file could not read if it does not exist
  • UPDATE: Changed zfiles to use glob() rather than popen("ls -d")
    as valgrind stalls on popen(), it is cleaner than using a piped command
  • UPDATE: Added SACTESTS and SACVALGRIND as options to
    Run individual tests SACTESTS=testname
    Run tests within valgrind SACVALGRIND=1
  • UPDATE: Moved rstrip() and lstrip() into bot/indexb.c
    - co/zopens.c and co/znfiles.c now take a filename
    copy it and strip all whitespace to the right.
  • UPDATE: Introduction of strcut() to extract a string from a
    Fortran character array
    Results is null-terminated and user must free the string
    Removed many of the messy constructs like:
    strncpy((str = malloc(ic2-ic1+2)),in+ic1,ic2-ic1+1);
    str[ic2-ic1+1]='/0';
  • BUG FIX: gcc -Wall -Wextra -O2,
    clang Address Sanitizer, valgrind, clang Static Analyzer
    - Pointer Deferences
    - Memory Leaks
    - Comment out / remove sections of unused code
    - Initialize Variables
    - Fixes for gcc -Wextra, mostly comparision of signed and unsigned int
    - Fixes to correct gcc -Wall warnings except in libtau
    - Fixes to warnings and errors from clang v1.7 (LLVM2.9)
  • BUG FIX: Line Styles:
    - Make the maximum number of linestyles to loop over to be 10, it was 4
    - Modify PDF, PS, and X11 to have the same line styles as SGF.
    - Always use drawpoly in src/gdm/polyline.c otherwise linestyles
    are not plotted correclty
    Linestyles were destroyed as each point is plotted individually
    - PNG will match X11
  • BUG FIX: Postscript Plotting: Changed ps_moveto() and ps_lineto()
    from int to float for "more correct" and "better looking" plots
  • BUG FIX: FileID
    Edit location and length symbols and line segments in FILEID for
    PDF and PS
    Testsuite should include tests of the output formats
    - line inc on
    - symbol inc on
  • BUG FIX: Fix for failure on strncpy() that exceeds the size of
    destination string
    in src/fdm/rcdi.c for KEVNM. Uses memcpy()
  • BUG FIX: Fix warnings about "error: initializer element is not
    constant" (llvm-gcc-4.2 on OSX 10.7)
  • BUG FIX: Initialize runtext in src/co/zrun.c so that subscpy() can
    determine the length of output string
  • BUG FIX: changestring() and deletestring() now do not call strcut() if
    the start is after the end (or the end if before the start)
    strcut() reports errors directly to standard output
  • BUG FIX: Fix logic in funcgen command as to how time in calculated
    to avoid round off-errors. Has implications to tests that use the
    funcgen command to generate data.
    Round off error was also fixed in
    - src/scm/lifite.c (linear least squares fit)
    - src/scm/xrtr.c (remove trend)
  • BUG FIX: Check output of dblMergeTrees(). If output is the tree to
    be merged, then do not delete the tree as the parent tree did not
    exist. If the output and the merge tree are different then delete
    the tree.
  • BUG FIX: Fix to buffer overruns found using clang Address Sanitizer
  • BUG FIX: Fixes for memory leaks and pointer dereference in evalresp
  • BUG FIX: Realloc correction in src/SeisMgr/gse/GSEWaveforms.c
  • BUG FIX: Set *ncurves = jdx+1 as the number of phases increases.
    The total number of phases is required to know how many to
    release at the end. src/sss/xtraveltime.c
  • BUG FIX: Macro KYES did not work if the KEY was Capitialized
    not case sensitive in
    src/ncpf/macrokeyword.c
  • BUG FIX: Return with error if Freq, Amplitude or Phase is NULL
    src/icm/fap.c
  • BUG FIX: If input string the strcasestr_bsd() is NULL reutrn NULL
    src/icm/polezero.c
  • BUG FIX: Fix typo ygridmn -> ygrdmin in src/gtm/ylinaxis.c
  • BUG FIX: Fix call to setlinestyle() in src/gtm/xlogaxis.c
  • BUG FIX: Changed xlf to xloc (typo)
  • BUG FIX: Changed unused to 1.0 in call to setsgfsize()
    src/gam/xsgf.c
  • BUG FIX: Do not putfil() if there is an error in src/exm/xfg.c
  • BUG FIX: Error recovery in src/dfm/xsort.c
  • BUG FIX: Return if pick prefs file is empty in src/dfm/getprefs.c * BUG FIX: Logic reorganization in src/dfm/defcut.c
    - stop point code modified heavily
    - Affect cutim commands currently no tests * BUG FIX: Fix to $Filename,HeaderVariable to find a name or not
    src/dff/gethv.c * BUG FIX: Removed rntused and replace with 1.0 in src/dbh/pltplr.c * BUG FIX: Added error check to make sure origin was with data array
    src/dbh/alias.c * BUG FIX: Added error check for unknown frequency sampleing
    src/dbh/afr.c * BUG FIX: Fix typo realm -> realmx and removed realm
    variable in src/cpf/lkrrcp.c * BUG FIX: Ensure error reporting doesn't fail if the command stack
    is empty in src/cpf/cfmt.c * BUG FIX: Moved call to gettextsize()
    src/countouring/plotcontdata.c to initialize widthsave and heightsave * BUG FIX: Changed src/coda/get_input() to accept and return
    global_params so variables can be retrieved
    Calls to calc_envelopes now have all arguments defined,
    see npts and ndx2 * BUG FIX: Added necessary branch branches { } around the
    'find the filename' and
    'write the file' statements in src/coda/calc_coda_amplitudes.c * BUG FIX: Removed possible third branch in src/coda/C_overlap.c
    would cause nload1 to be undefined * BUG FIX: Check input arguments are > 0 in uniq() in src/co/select.c * BUG FIX: Return if nlist <= 0 in src/bot/wrlist.c * BUG FIX: Check to make sure return from indexb is > 0
    src/bot/lequal.c * BUG FIX: Rebuilt cmplxang(complexf c) to handle all cases properly * BUG FIX: Changed undefined badindirect flag to true error code
    - 1206 VARS option not currently implemented: * BUG FIX: design() and inspect() functions now return with output error
    if the analog filter prototype is of unknown type * BUG FIX: sgftops
    - colortable code [never used] not compiled in: see #define COLORTABLE
    - nbuffer changed from long to size_t and set before malloc statement
    - buffer initialized to all zeros following malloc
    - buffer free()'d after everything is done
    - presisent 'count = buffer[i++];' statements removed,
    count is not used anywhere in the code
    - unused width and height variables not set in 'Hardware text size' * BUG FIX: Fixes from Richard Godbee
    - fix case statements for header field T2 through T9 in iztypeMessage()
    - fix use-after-free in specplot()
    - fix logic error in getResponse() when freeing memory
    - fix unterminated comment block in gdm/settextfont.c
    - refactor taper() to simplify flow and prevent
    return of uninitialized variables
    - fix error-handling problems in sgf_print() and tmpfile_create()
    tmpfile_create() would've passed NULL to mkstemps() if
    strdup() failed.
    sgf_print() would've passed NULL to unlink if
    tmpfile_create() failed.
    It also would've returned an uninitialized variable (retval)
    if sgf_to_ps() returned a non-zero value.
    - fix error-handling problems in sgf_to_ps() and ps_print()
    Neither function checked to see if asprintf() succeeded.
    ps_print() could've returned an uninitialized variable
    if sac_print_disable
    - fix logic error in pickwindows(), remove unused variable lxlims
    - fix possible use of uninitialized vars,
    simplify flow in xaddstack()
    simplify flow in xchangestack()
    simplify flow in xglobalstack()
    - fix reference to uninitialized variable in xlogaxis() and ylogaxis()
    - more fixes for xlogaxis() and ylogaxis()
    - fix dereference of uninitialized pointer in MakeFileList() in src/
    - doFile[] wasn't initialized on all flow paths in xch() in src/dfm/
    - fix possible use of uninitialized variable in worlddraw()
    - fix possible use of uninitialized variable in worldmove()
    - initialize lempty in xppk()
    - stop reading from uninitialized array, cleanup of setctable3()
    - fix signed/unsigned mismatch in setctable3()
    - fix uninitialized pointer dereference in encodeHeader()
    in utils/bbfswap.c, It doesn't look like the code that
    dealt with the "p" pointer actually did

2012/03/26 * BUG FIX: src/sam/xconvolve.c corrected read outside array limits
similar correction in src/sam/xcorrelate.c