Hello community, here is the log from the commit of package gtkwave for openSUSE:Factory checked in at 2016-08-29 15:46:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gtkwave (Old) and /work/SRC/openSUSE:Factory/.gtkwave.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gtkwave" Changes: -------- --- /work/SRC/openSUSE:Factory/gtkwave/gtkwave.changes 2016-06-12 18:55:37.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.gtkwave.new/gtkwave.changes 2016-08-29 15:49:22.000000000 +0200 @@ -1,0 +2,12 @@ +Sun Aug 28 17:45:53 UTC 2016 - [email protected] + +- Uptdate to version 3.3.76 + * Bugfixes and minor changes, see included ChangeLog file + +------------------------------------------------------------------- +Mon Aug 8 18:18:00 UTC 2016 - [email protected] + +- Update to version 3.3.75 + * bugfix release, see included ChangeLog file for details + +------------------------------------------------------------------- Old: ---- gtkwave-3.3.73.tar.gz New: ---- gtkwave-3.3.76.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gtkwave.spec ++++++ --- /var/tmp/diff_new_pack.SkJM5P/_old 2016-08-29 15:49:26.000000000 +0200 +++ /var/tmp/diff_new_pack.SkJM5P/_new 2016-08-29 15:49:26.000000000 +0200 @@ -17,7 +17,7 @@ Name: gtkwave -Version: 3.3.73 +Version: 3.3.76 Release: 0 Summary: Waveform viewer for Ditital Signals License: GPL-2.0+ ++++++ gtkwave-3.3.73.tar.gz -> gtkwave-3.3.76.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/ChangeLog new/gtkwave-3.3.76/ChangeLog --- old/gtkwave-3.3.73/ChangeLog 2016-06-12 06:37:59.000000000 +0200 +++ new/gtkwave-3.3.76/ChangeLog 2016-08-13 23:43:47.000000000 +0200 @@ -1556,3 +1556,23 @@ Fix emission of all filter names so they are emitted in canonical fashion so as to avoid growing strings of ../ in savefiles. +3.3.74 27jul16 Fix for when a signal name is used as a hierarchy name at the + same level of scope. (Affects fsdb.) + Added --rcvar command line option to insert rc variable changes + individually without needing to point to a configuration file. + Change to combine traces down/up routines to handle 2D vector + name generation. + Allow FSDB files to contain ".gz" and ".bz2" suffixes as the + libnffr loader can handle those. + If a variable is declared in the dumpfile as an integer, then + it is imported to the waveform display as an integer instead of + a hex value. This works for dump file formats that show the + datatype in the SST window. + Added code that should prevent the primary marker from + disappearing unexpectedly as well as dynamic resizing being + stuck in the unset marker width. +3.3.75 02aug16 Fix crash when -S and -W are used in tandem. +3.3.76 13aug16 Fix for --disable-tcl in ./configure caused by 3.3.75 fix. + Crash fix in fstapi.c on read value at time accessing of + FST files that use new dynamic aliases, FastLZ, or LZ4. This + primarily affects rtlbrowse. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/LICENSE.TXT new/gtkwave-3.3.76/LICENSE.TXT --- old/gtkwave-3.3.73/LICENSE.TXT 2016-05-11 20:22:21.000000000 +0200 +++ new/gtkwave-3.3.76/LICENSE.TXT 2016-08-15 20:03:48.000000000 +0200 @@ -1,6 +1,6 @@ ########################################################################## -GTKWave 3.3.73 Wave Viewer is Copyright (C) 1999-2016 Tony Bybell. +GTKWave 3.3.76 Wave Viewer is Copyright (C) 1999-2016 Tony Bybell. Portions of GTKWave are Copyright (C) 1999-2016 Udi Finkelstein. Context support is Copyright (C) 2007-2016 Kermin Elliott Fleming. Trace group support is Copyright (C) 2009-2016 Donald Baltus. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/configure new/gtkwave-3.3.76/configure --- old/gtkwave-3.3.73/configure 2016-05-11 20:22:21.000000000 +0200 +++ new/gtkwave-3.3.76/configure 2016-08-08 17:43:58.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for gtkwave 3.3.73. +# Generated by GNU Autoconf 2.69 for gtkwave 3.3.76. # # Report bugs to <[email protected]>. # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='gtkwave' PACKAGE_TARNAME='gtkwave' -PACKAGE_VERSION='3.3.73' -PACKAGE_STRING='gtkwave 3.3.73' +PACKAGE_VERSION='3.3.76' +PACKAGE_STRING='gtkwave 3.3.76' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1383,7 +1383,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures gtkwave 3.3.73 to adapt to many kinds of systems. +\`configure' configures gtkwave 3.3.76 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1449,7 +1449,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gtkwave 3.3.73:";; + short | recursive ) echo "Configuration of gtkwave 3.3.76:";; esac cat <<\_ACEOF @@ -1595,7 +1595,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gtkwave configure 3.3.73 +gtkwave configure 3.3.76 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2239,7 +2239,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by gtkwave $as_me 3.3.73, which was +It was created by gtkwave $as_me 3.3.76, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3106,7 +3106,7 @@ # Define the identity of the package. PACKAGE='gtkwave' - VERSION='3.3.73' + VERSION='3.3.76' cat >>confdefs.h <<_ACEOF @@ -10997,7 +10997,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by gtkwave $as_me 3.3.73, which was +This file was extended by gtkwave $as_me 3.3.76, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11063,7 +11063,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -gtkwave config.status 3.3.73 +gtkwave config.status 3.3.76 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/configure.ac new/gtkwave-3.3.76/configure.ac --- old/gtkwave-3.3.73/configure.ac 2016-05-11 20:22:21.000000000 +0200 +++ new/gtkwave-3.3.76/configure.ac 2016-08-08 17:43:58.000000000 +0200 @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT(gtkwave, 3.3.73, [email protected]) +AC_INIT(gtkwave, 3.3.76, [email protected]) AC_CONFIG_SRCDIR([src/vcd.c]) AM_INIT_AUTOMAKE AC_CONFIG_HEADER([config.h]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/contrib/bundle_for_osx/Info-gtkwave.plist new/gtkwave-3.3.76/contrib/bundle_for_osx/Info-gtkwave.plist --- old/gtkwave-3.3.73/contrib/bundle_for_osx/Info-gtkwave.plist 2016-06-12 06:37:59.000000000 +0200 +++ new/gtkwave-3.3.76/contrib/bundle_for_osx/Info-gtkwave.plist 2016-08-08 17:43:58.000000000 +0200 @@ -8,7 +8,7 @@ <key>CFBundleExecutable</key> <string>gtkwave</string> <key>CFBundleGetInfoString</key> - <string>3.3.73, (C) 1999-2016 Tony Bybell http://gtkwave.sourceforge.net</string> + <string>3.3.76, (C) 1999-2016 Tony Bybell http://gtkwave.sourceforge.net</string> <key>CFBundleIconFile</key> <string>gtkwave.icns</string> <key>CFBundleIdentifier</key> @@ -18,11 +18,11 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>3.3.73</string> + <string>3.3.76</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>3.3.73</string> + <string>3.3.76</string> <key>NSHumanReadableCopyright</key> <string>Copyright 1999 - 2016 Tony Bybell, GNU General Public License.</string> <key>LSMinimumSystemVersion</key> Files old/gtkwave-3.3.73/doc/gtkwave.odt and new/gtkwave-3.3.76/doc/gtkwave.odt differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/man/gtkwave.1 new/gtkwave-3.3.76/man/gtkwave.1 --- old/gtkwave-3.3.73/man/gtkwave.1 2016-06-12 06:37:59.000000000 +0200 +++ new/gtkwave-3.3.76/man/gtkwave.1 2016-07-03 03:39:40.000000000 +0200 @@ -1,4 +1,4 @@ -.TH "GTKWAVE" "1" "3.3.73" "Anthony Bybell" "Simulation Wave Viewer" +.TH "GTKWAVE" "1" "3.3.74" "Anthony Bybell" "Simulation Wave Viewer" .SH "NAME" .LP gtkwave \- Visualization tool for VCD, LXT, LXT2, VZT, FST, and GHW files @@ -111,6 +111,9 @@ be specified earlier in the command line than the \fB\-\-restore\fR option. If RPCID is not specified, then the default of 0 is used. This option only works if \fB\-\-with-gconf\fR was specified during \fI./configure\fP. .TP +\fB\-4\fR,\fB\-\-rcvar\fR +Specify single rc variable values individually. These take effect after any other rc variables have been loaded from internal defaults or from configuration files. +.TP \fB\-I\fR,\fB\-\-interactive\fR Specifies that "interactive" VCD mode is to be used which allows a viewer to navigate a VCD trace while GTKWave is processing the VCD file. When this option is used, the filename is overloaded such that it is the hexadecimal value for the shared memory ID of a writer. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/analyzer.c new/gtkwave-3.3.76/src/analyzer.c --- old/gtkwave-3.3.73/src/analyzer.c 2016-04-07 21:35:22.000000000 +0200 +++ new/gtkwave-3.3.76/src/analyzer.c 2016-07-06 21:58:00.000000000 +0200 @@ -547,7 +547,18 @@ if(n<0)n=-n; n++; - t->flags = (( n > 3 )||( n < -3 )) ? TR_HEX|TR_RJUSTIFY : TR_BIN|TR_RJUSTIFY; + switch(nd->vartype) + { + case ND_VCD_INTEGER: + case ND_VCD_PARAMETER: + case ND_SV_INT: + case ND_SV_SHORTINT: + case ND_SV_LONGINT: t->flags = TR_SIGNED | TR_RJUSTIFY; + break; + + default: t->flags = (( n > 3 )||( n < -3 )) ? TR_HEX|TR_RJUSTIFY : TR_BIN|TR_RJUSTIFY; + break; + } } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/analyzer.h new/gtkwave-3.3.76/src/analyzer.h --- old/gtkwave-3.3.73/src/analyzer.h 2016-04-07 03:10:44.000000000 +0200 +++ new/gtkwave-3.3.76/src/analyzer.h 2016-07-27 19:14:56.000000000 +0200 @@ -434,6 +434,8 @@ TimeType end; /* ending time of trace on screen */ TimeType marker; TimeType prevmarker; /* from last drawmarker() */ + TimeType resizemarker; /* from last MaxSignalLength() */ + TimeType resizemarker2; /* from 2nd last MaxSignalLength() */ TimeType lmbcache; /* initial marker pos */ TimeType timecache; /* to get around floating pt limitation */ TimeType laststart; /* caches last set value */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/helpers/fst/fstapi.c new/gtkwave-3.3.76/src/helpers/fst/fstapi.c --- old/gtkwave-3.3.73/src/helpers/fst/fstapi.c 2015-12-15 07:36:14.000000000 +0100 +++ new/gtkwave-3.3.76/src/helpers/fst/fstapi.c 2016-08-13 23:43:47.000000000 +0200 @@ -3074,6 +3074,7 @@ uint64_t rvat_vc_maxhandle; off_t rvat_vc_start; uint32_t *rvat_sig_offs; +int rvat_packtype; uint32_t rvat_chain_len; unsigned char *rvat_chain_mem; @@ -5886,6 +5887,7 @@ xc->rvat_vc_maxhandle = fstReaderVarint64(xc->f); xc->rvat_vc_start = ftello(xc->f); /* points to '!' character */ +xc->rvat_packtype = fgetc(xc->f); #ifdef FST_DEBUG fprintf(stderr, "\tframe_uclen: %d, frame_clen: %d, frame_maxhandle: %d\n", @@ -5910,37 +5912,84 @@ pnt = chain_cmem; idx = 0; pval = 0; -do - { - int skiplen; - uint64_t val = fstGetVarint32(pnt, &skiplen); - if(!val) - { - pnt += skiplen; - val = fstGetVarint32(pnt, &skiplen); - xc->rvat_chain_table[idx] = 0; - xc->rvat_chain_table_lengths[idx] = -val; - idx++; - } - else - if(val&1) - { - pval = xc->rvat_chain_table[idx] = pval + (val >> 1); - if(idx) { xc->rvat_chain_table_lengths[pidx] = pval - xc->rvat_chain_table[pidx]; } - pidx = idx++; - } - else - { - fstHandle loopcnt = val >> 1; - for(i=0;i<loopcnt;i++) +if(sectype == FST_BL_VCDATA_DYN_ALIAS2) + { + uint32_t prev_alias = 0; + + do { + int skiplen; + + if(*pnt & 0x01) { - xc->rvat_chain_table[idx++] = 0; + int64_t shval = fstGetSVarint64(pnt, &skiplen) >> 1; + if(shval > 0) + { + pval = xc->rvat_chain_table[idx] = pval + shval; + if(idx) { xc->rvat_chain_table_lengths[pidx] = pval - xc->rvat_chain_table[pidx]; } + pidx = idx++; + } + else if(shval < 0) + { + xc->rvat_chain_table[idx] = 0; /* need to explicitly zero as calloc above might not run */ + xc->rvat_chain_table_lengths[idx] = prev_alias = shval; /* because during this loop iter would give stale data! */ + idx++; + } + else + { + xc->rvat_chain_table[idx] = 0; /* need to explicitly zero as calloc above might not run */ + xc->rvat_chain_table_lengths[idx] = prev_alias; /* because during this loop iter would give stale data! */ + idx++; + } } - } - - pnt += skiplen; - } while (pnt != (chain_cmem + chain_clen)); + else + { + uint64_t val = fstGetVarint32(pnt, &skiplen); + + fstHandle loopcnt = val >> 1; + for(i=0;i<loopcnt;i++) + { + xc->rvat_chain_table[idx++] = 0; + } + } + + pnt += skiplen; + } while (pnt != (chain_cmem + chain_clen)); + } + else + { + do + { + int skiplen; + uint64_t val = fstGetVarint32(pnt, &skiplen); + + if(!val) + { + pnt += skiplen; + val = fstGetVarint32(pnt, &skiplen); + xc->rvat_chain_table[idx] = 0; + xc->rvat_chain_table_lengths[idx] = -val; + idx++; + } + else + if(val&1) + { + pval = xc->rvat_chain_table[idx] = pval + (val >> 1); + if(idx) { xc->rvat_chain_table_lengths[pidx] = pval - xc->rvat_chain_table[pidx]; } + pidx = idx++; + } + else + { + fstHandle loopcnt = val >> 1; + for(i=0;i<loopcnt;i++) + { + xc->rvat_chain_table[idx++] = 0; + } + } + + pnt += skiplen; + } while (pnt != (chain_cmem + chain_clen)); + } free(chain_cmem); xc->rvat_chain_table[idx] = indx_pos - xc->rvat_vc_start; @@ -6004,10 +6053,20 @@ unsigned char *mc = malloc(xc->rvat_chain_table_lengths[facidx]); unsigned long destlen = xc->rvat_chain_len; unsigned long sourcelen = xc->rvat_chain_table_lengths[facidx]; - int rc; + int rc = Z_OK; fstFread(mc, xc->rvat_chain_table_lengths[facidx], 1, xc->f); - rc = uncompress(mu, &destlen, mc, sourcelen); + + switch(xc->rvat_packtype) + { + case '4': rc = (destlen == (unsigned long)LZ4_decompress_safe_partial((char *)mc, (char *)mu, sourcelen, destlen, destlen)) ? Z_OK : Z_DATA_ERROR; + break; + case 'F': fastlz_decompress(mc, sourcelen, mu, destlen); /* rc appears unreliable */ + break; + default: rc = uncompress(mu, &destlen, mc, sourcelen); + break; + } + free(mc); if(rc != Z_OK) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/helpers/vcd2fst.c new/gtkwave-3.3.76/src/helpers/vcd2fst.c --- old/gtkwave-3.3.73/src/helpers/vcd2fst.c 2015-05-21 21:22:50.000000000 +0200 +++ new/gtkwave-3.3.76/src/helpers/vcd2fst.c 2016-07-11 17:28:42.000000000 +0200 @@ -479,7 +479,7 @@ else { #ifdef VCD2FST_EXTLOAD_CONV - if(suffix_check(vname, "."EXTLOAD_SUFFIX)) + if(suffix_check(vname, "."EXTLOAD_SUFFIX) || suffix_check(vname, "."EXTLOAD_SUFFIX".gz") || suffix_check(vname, "."EXTLOAD_SUFFIX".bz2")) { sprintf(bin_fixbuff, EXTCONV_PATH" %s", vname); f = popen(bin_fixbuff, "r"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/main.c new/gtkwave-3.3.76/src/main.c --- old/gtkwave-3.3.73/src/main.c 2016-05-11 20:22:21.000000000 +0200 +++ new/gtkwave-3.3.76/src/main.c 2016-08-11 21:33:49.000000000 +0200 @@ -20,6 +20,7 @@ #ifdef __MINGW32__ #include <windows.h> #endif +#include "fsdb_wrapper_api.h" /* #define WAVE_CRASH_ON_GTK_WARNING @@ -215,6 +216,22 @@ #endif +#ifdef WAVE_FSDB_READER_IS_PRESENT +static void close_all_fsdb_files(void) /* otherwise fsdb can leave around stray files if .gz/.bz2 was in use */ +{ +unsigned int i; +for(i=0;i<GLOBALS->num_notebook_pages;i++) + { + if((*GLOBALS->contexts)[i]->extload_ffr_ctx) + { + fsdbReaderClose((*GLOBALS->contexts)[i]->extload_ffr_ctx); + (*GLOBALS->contexts)[i]->extload_ffr_ctx = NULL; + } + } +} +#endif + + static void print_help(char *nam) { #if defined(EXTLOAD_SUFFIX) && defined(EXTCONV_PATH) @@ -323,6 +340,7 @@ RPC_GETOPT CHDIR_GETOPT RPC_GETOPT3 +" -4, --rcvar specify single rc variable values individually\n" INTR_GETOPT " -C, --comphier use compressed hierarchy names (slower)\n" " -g, --giga use gigabyte mempacking when recoding (slower)\n" @@ -469,11 +487,13 @@ struct Global *old_g = NULL; int splash_disable_rc_override = 0; -int mainwindow_already_built; +int mainwindow_already_built = 0; #ifdef MAC_INTEGRATION GdkPixbuf *dock_pb; #endif +struct rc_override *rc_override_head = NULL, *rc_override_curr = NULL; + WAVE_LOCALE_FIX /* Initialize the GLOBALS structure for the first time... */ @@ -724,6 +744,7 @@ init_filetrans_data(); /* for file translation splay trees */ init_proctrans_data(); /* for proc translation structs */ init_ttrans_data(); /* for transaction proc translation structs */ + if(!mainwindow_already_built) { atexit(remove_all_proc_filters); @@ -731,6 +752,9 @@ #if defined __MINGW32__ atexit(close_all_fst_files); #endif +#ifdef WAVE_FSDB_READER_IS_PRESENT + atexit(close_all_fsdb_files); +#endif } if(mainwindow_already_built) @@ -779,10 +803,11 @@ {"rpcid", 1, 0, '1' }, {"chdir", 1, 0, '2'}, {"restore", 0, 0, '3'}, + {"rcvar", 1, 0, '4'}, {0, 0, 0, 0} }; - c = getopt_long (argc, argv, "zf:Fon:a:Ar:dl:s:e:c:t:NS:vVhxX:MD:IgCLR:P:O:WT:1:2:3", long_options, + c = getopt_long (argc, argv, "zf:Fon:a:Ar:dl:s:e:c:t:NS:vVhxX:MD:IgCLR:P:O:WT:1:2:34:", long_options, &option_index); if (c == -1) break; /* no more args */ @@ -979,6 +1004,23 @@ strcpy(override_rc, optarg); break; + case '4': + { + struct rc_override *rco = calloc_2(1, sizeof(struct rc_override)); + rco->str = strdup_2(optarg); + + if(rc_override_curr) + { + rc_override_curr->next = rco; + rc_override_curr = rco; + } + else + { + rc_override_head = rc_override_curr = rco; + } + } + break; + case 's': if(GLOBALS->skip_start) free_2(GLOBALS->skip_start); GLOBALS->skip_start = malloc_2(strlen(optarg)+1); @@ -1268,6 +1310,24 @@ } fprintf(stderr, "\n%s\n\n",WAVE_VERSION_INFO); + + +if(!old_g) /* copy all variables earlier when old_g is set */ + { + while(rc_override_head) + { + int rco_succ; + char *rco_copy_str = strdup_2(rc_override_head->str); + rco_succ = insert_rc_variable(rc_override_head->str); + fprintf(stderr, "RCVAR | '%s' %s\n", rco_copy_str, rco_succ ? "FOUND" : "NOT FOUND"); + free_2(rco_copy_str); + rc_override_curr = rc_override_head->next; + free_2(rc_override_head->str); + free_2(rc_override_head); + rc_override_head = rc_override_curr; + } + } + if(!is_wish) { if(tcl_interpreter_needs_making) @@ -1332,7 +1392,11 @@ } else #if defined(EXTLOAD_SUFFIX) -if(suffix_check(GLOBALS->loaded_file_name, "."EXTLOAD_SUFFIX) && !opt_vcd) +if( + (suffix_check(GLOBALS->loaded_file_name, "."EXTLOAD_SUFFIX ) && !opt_vcd) || + (suffix_check(GLOBALS->loaded_file_name, "."EXTLOAD_SUFFIX".gz" ) && !opt_vcd) || /* loader automatically does gzip -cd */ + (suffix_check(GLOBALS->loaded_file_name, "."EXTLOAD_SUFFIX".bz2") && !opt_vcd) /* loader automatically does bzip2 -cd */ + ) { TimeType extload_max; @@ -2420,7 +2484,11 @@ init_busy(); -if(scriptfile) +if(scriptfile +#if defined(HAVE_LIBTCL) + && GLOBALS->interp +#endif +) { execute_script(scriptfile, 1); /* deallocate the name in the script because context might swap out from under us! */ scriptfile=NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/menu.c new/gtkwave-3.3.76/src/menu.c --- old/gtkwave-3.3.73/src/menu.c 2016-04-07 03:17:54.000000000 +0200 +++ new/gtkwave-3.3.76/src/menu.c 2016-07-03 03:39:40.000000000 +0200 @@ -3107,6 +3107,7 @@ bvptr combine_traces(int direction, Trptr single_trace_only) { Trptr t, tmp; + Trptr tfirst = NULL; int tmpi,dirty=0, attrib_reqd=0; nptr bitblast_parent; int bitblast_delta=0; @@ -3184,6 +3185,7 @@ t = single_trace_only; } + tfirst = t; while(t) { if(t->flags&TR_HIGHLIGHT) @@ -3401,6 +3403,67 @@ aname = NULL; } + if((!aname) && !single_trace_only) /* ajb 020716: recent add to handle combine down on 2D vectors */ + { + char *t_topname = NULL; + char *t_botname = NULL; + t = tfirst; + while(t) + { + if(t->flags&TR_HIGHLIGHT) + { + if(t->flags&(TR_BLANK|TR_ANALOG_BLANK_STRETCH)) + { + /* nothing */ + } + else + { + if(t->vector) + { + char *vname = t->n.vec ? t->n.vec->bvname : NULL; + if(vname) + { + if(!t_topname) + { + t_topname = vname; + } + else + { + t_botname = vname; + } + } + } + else + { + if(!t_topname) + { + t_topname = t->n.nd->nname; + } + else + { + t_botname = t->n.nd->nname; + } + + if(t_topname && t_botname) + { + char *mat = attempt_vecmatch(t_topname, t_botname); + if(!mat) { t_topname = t_botname = NULL; break; } else { free_2(mat); } + } + } + } + + } + + t=t->t_next; + } + + if(t_topname && t_botname) + { + aname = direction ? attempt_vecmatch(t_topname, t_botname) : attempt_vecmatch(t_botname, t_topname); /* return this match */ + } + } + + if(!b->attribs) { if(aname) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/rc.c new/gtkwave-3.3.76/src/rc.c --- old/gtkwave-3.3.73/src/rc.c 2016-05-11 20:22:21.000000000 +0200 +++ new/gtkwave-3.3.76/src/rc.c 2016-07-03 03:39:40.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) Tony Bybell 1999-2013. + * Copyright (c) Tony Bybell 1999-2016. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -971,6 +971,63 @@ f_color_gmstrd ("7d8104"); /* green mustard */ } +int insert_rc_variable(char *str) +{ +int i; +int len; +int ok = 0; + +len=strlen(str); +if(len) + { + for(i=0;i<len;i++) + { + int pos; + if((str[i]==' ')||(str[i]=='\t')) continue; /* skip leading ws */ + if(str[i]=='#') break; /* is a comment */ + for(pos=i;i<len;i++) + { + if((str[i]==' ')||(str[i]=='\t')) + { + str[i]=0; /* null term envname */ + + for(i=i+1;i<len;i++) + { + struct rc_entry *r; + + if((str[i]==' ')||(str[i]=='\t')) continue; + if((r=bsearch((void *)(str+pos), (void *)rcitems, + sizeof(rcitems)/sizeof(struct rc_entry), + sizeof(struct rc_entry), rc_compare))) + { + int j; + for(j=len-1;j>=i;j--) + { + if((str[j]==' ')||(str[j]=='\t')) /* nuke trailing spaces */ + { + str[j]=0; + continue; + } + else + { + break; + } + } + r->func(str+i); /* call resolution function */ + ok = 1; + } + break; + } + break; /* added so multiple word values work properly*/ + } + } + break; + } + } + +return(ok); +} + void read_rc_file(char *override_rc) { @@ -1085,55 +1142,7 @@ GLOBALS->rc_line_no++; if((str=fgetmalloc(handle))) { - int len; - len=strlen(str); - if(len) - { - for(i=0;i<len;i++) - { - int pos; - if((str[i]==' ')||(str[i]=='\t')) continue; /* skip leading ws */ - if(str[i]=='#') break; /* is a comment */ - for(pos=i;i<len;i++) - { - if((str[i]==' ')||(str[i]=='\t')) - { - str[i]=0; /* null term envname */ - - for(i=i+1;i<len;i++) - { - struct rc_entry *r; - - if((str[i]==' ')||(str[i]=='\t')) continue; - if((r=bsearch((void *)(str+pos), (void *)rcitems, - sizeof(rcitems)/sizeof(struct rc_entry), - sizeof(struct rc_entry), rc_compare))) - { - int j; - - for(j=len-1;j>=i;j--) - { - if((str[j]==' ')||(str[j]=='\t')) /* nuke trailing spaces */ - { - str[j]=0; - continue; - } - else - { - break; - } - } - r->func(str+i); /* call resolution function */ - } - break; - } - break; /* added so multiple word values work properly*/ - } - } - break; - } - - } + insert_rc_variable(str); free_2(str); } } @@ -1142,4 +1151,3 @@ errno=0; return; } - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/rc.h new/gtkwave-3.3.76/src/rc.h --- old/gtkwave-3.3.73/src/rc.h 2014-05-28 06:59:41.000000000 +0200 +++ new/gtkwave-3.3.76/src/rc.h 2016-07-03 03:39:40.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) Tony Bybell 1999-2009. + * Copyright (c) Tony Bybell 1999-2016. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -18,7 +18,14 @@ int (*func)(char *); }; +struct rc_override /* used for --rcvar command line option */ +{ +struct rc_override *next; +char *str; +}; + void read_rc_file(char *override_rc); +int insert_rc_variable(char *str); int get_rgb_from_name(char *str); GdkGC *get_gc_from_name(char *str); @@ -117,4 +124,3 @@ int f_zoom_pow10_snap (char *str); #endif - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/tree.c new/gtkwave-3.3.76/src/tree.c --- old/gtkwave-3.3.73/src/tree.c 2014-05-28 06:59:41.000000000 +0200 +++ new/gtkwave-3.3.76/src/tree.c 2016-07-01 02:42:56.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) Tony Bybell 1999-2011. + * Copyright (c) Tony Bybell 1999-2016. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -681,7 +681,7 @@ if(GLOBALS->facs2_pos_tree_c_1>=0) { fprintf(stderr, "Internal Error: GLOBALS->facs2_pos_tree_c_1 = %d\n",GLOBALS->facs2_pos_tree_c_1); - fprintf(stderr, "[This is usually the result of multiply defined facilities.]\n"); + fprintf(stderr, "[This is usually the result of multiply defined facilities such as a hierarchy name also being used as a signal at the same level of scope.]\n"); exit(255); } @@ -712,7 +712,7 @@ { rs: s=get_module_name(s); - if(t && !strcmp(t->name, GLOBALS->module_tree_c_1)) + if(s && t && !strcmp(t->name, GLOBALS->module_tree_c_1)) /* ajb 300616 added "s &&" to cover case where we can have hierarchy + final name are same, see A.B.C.D notes elsewhere in this file */ { prevt = t; t = t->child; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/treesearch_gtk2.c new/gtkwave-3.3.76/src/treesearch_gtk2.c --- old/gtkwave-3.3.73/src/treesearch_gtk2.c 2014-12-05 09:03:31.000000000 +0100 +++ new/gtkwave-3.3.76/src/treesearch_gtk2.c 2016-07-27 23:56:18.000000000 +0200 @@ -313,7 +313,7 @@ int force_open_tree_node(char *name, int keep_path_nodes_open, struct tree **t_pnt) { GtkCTree *ctree = GLOBALS->ctree_main; int rv = 1 ; /* can possible open */ - if(ctree) { + if(ctree && GLOBALS->any_tree_node) { int namlen = strlen(name); char *namecache = wave_alloca(namlen+1); char *name_end = name + namlen - 1; @@ -524,7 +524,7 @@ { GtkCTree *ctree = GLOBALS->ctree_main; -if(ctree) +if(ctree && GLOBALS->any_tree_node) { int namlen = strlen(name); char *namecache = wave_alloca(namlen+1); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/wavewindow.c new/gtkwave-3.3.76/src/wavewindow.c --- old/gtkwave-3.3.73/src/wavewindow.c 2014-09-26 22:00:23.000000000 +0200 +++ new/gtkwave-3.3.76/src/wavewindow.c 2016-07-27 19:14:56.000000000 +0200 @@ -631,6 +631,12 @@ GLOBALS->signalwindow_width_dirty=1; } GLOBALS->tims.prevmarker=GLOBALS->tims.marker; + +/* additional case for race conditions with MaxSignalLength */ +if(((GLOBALS->tims.resizemarker==-1)||(GLOBALS->tims.resizemarker2==-1)) && (GLOBALS->tims.resizemarker!=GLOBALS->tims.resizemarker2)) + { + GLOBALS->signalwindow_width_dirty=1; + } } @@ -896,7 +902,16 @@ gdk_draw_rectangle(GLOBALS->signalpixmap, GLOBALS->gc.gc_ltgray, TRUE, 0, 0, GLOBALS->signal_fill_width, GLOBALS->signalarea->allocation.height); + +{ +char signalwindow_width_dirty = GLOBALS->signalwindow_width_dirty; sync_marker(); +if(!signalwindow_width_dirty && GLOBALS->signalwindow_width_dirty) + { + MaxSignalLength_2(1); + } +} + RenderSigs((int)(GTK_ADJUSTMENT(GLOBALS->wave_vslider)->value),0); if(GLOBALS->signalarea_has_focus) @@ -950,9 +965,12 @@ newcurr=GLOBALS->tims.start; } +newcurr = time_trunc(newcurr); +if(newcurr < 0) newcurr = GLOBALS->min_time; /* prevents marker from disappearing? */ + if(!is_button_2) { - update_markertime(GLOBALS->tims.marker=cook_markertime(time_trunc(newcurr), xin, yin)); + update_markertime(GLOBALS->tims.marker=cook_markertime(newcurr, xin, yin)); if(GLOBALS->tims.lmbcache<0) GLOBALS->tims.lmbcache=time_trunc(newcurr); draw_marker_partitions(); @@ -964,7 +982,7 @@ } else { - GLOBALS->tims.baseline = ((GLOBALS->tims.baseline<0)||(is_button_2<0)) ? cook_markertime(time_trunc(newcurr), xin, yin) : -1; + GLOBALS->tims.baseline = ((GLOBALS->tims.baseline<0)||(is_button_2<0)) ? cook_markertime(newcurr, xin, yin) : -1; update_basetime(GLOBALS->tims.baseline); update_markertime(GLOBALS->tims.marker); wavearea_configure_event(GLOBALS->wavearea, NULL); @@ -2444,8 +2462,17 @@ if(GLOBALS->signal_pixmap_width > 32767) GLOBALS->signal_pixmap_width = 32767; /* fixes X11 protocol limitation crash */ } +GLOBALS->tims.resizemarker2 = GLOBALS->tims.resizemarker; +GLOBALS->tims.resizemarker = GLOBALS->tims.marker; + if(GLOBALS->signal_pixmap_width<60) GLOBALS->signal_pixmap_width=60; +MaxSignalLength_2(dirty_kick); +} + + +void MaxSignalLength_2(char dirty_kick) +{ if(!GLOBALS->in_button_press_wavewindow_c_1) { if(!GLOBALS->do_resize_signals) @@ -2519,6 +2546,7 @@ } } } + /***************************************************************************/ void UpdateSigValue(Trptr t) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.73/src/wavewindow.h new/gtkwave-3.3.76/src/wavewindow.h --- old/gtkwave-3.3.73/src/wavewindow.h 2014-05-28 06:59:41.000000000 +0200 +++ new/gtkwave-3.3.76/src/wavewindow.h 2016-07-27 19:14:56.000000000 +0200 @@ -13,6 +13,8 @@ void button_press_release_common(void); void UpdateSigValue(Trptr t); void MaxSignalLength(void); +void MaxSignalLength_2(char dirty_kick); /* used to resize but not fully recalculate like MaxSignalLength() */ + void RenderSigs(int trtarget, int update_waves); int RenderSig(Trptr t, int i, int dobackground); void populateBuffer(Trptr t, char *altname, char* buf);
