Hello community, here is the log from the commit of package gtkwave for openSUSE:Factory checked in at 2020-02-25 16:04:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gtkwave (Old) and /work/SRC/openSUSE:Factory/.gtkwave.new.26092 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gtkwave" Tue Feb 25 16:04:57 2020 rev:31 rq:778806 version:3.3.104 Changes: -------- --- /work/SRC/openSUSE:Factory/gtkwave/gtkwave.changes 2019-08-28 18:35:54.769279212 +0200 +++ /work/SRC/openSUSE:Factory/.gtkwave.new.26092/gtkwave.changes 2020-02-25 16:05:29.240411499 +0100 @@ -1,0 +2,18 @@ +Mon Feb 24 08:44:00 UTC 2020 - Paolo Stivanin <[email protected]> + +- Update to 3.3.104: + * Remove redundant TREE_VHDL_ST_PACKAGE from SST exclude. + * Added addCommentTracesFromList tcl command from user patch. + * Harden savefile loader for missing group start on vectors. + * Preliminary VHDL support for wlf2vcd. + * Add missing return value checks on mmap() in FST writer. + * Fix MAP_FAILED missing for MinGW. + * Fix to make the coloration red on 'u' traces. (Bug from + * Dinotrace-like rendering in 3.3.96.) + * Typo fix on missing group start on vectors. + * Added support for loading .vf files + * Added support for dumping variable types in vcd saveer, + not just using "wire" for non-reals/strings. + * Fix for uninitialized values at time 0 for FST, FSDB loaders. + +------------------------------------------------------------------- Old: ---- gtkwave-3.3.101.tar.gz New: ---- gtkwave-3.3.104.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gtkwave.spec ++++++ --- /var/tmp/diff_new_pack.or9Lfv/_old 2020-02-25 16:05:30.092411439 +0100 +++ /var/tmp/diff_new_pack.or9Lfv/_new 2020-02-25 16:05:30.096411439 +0100 @@ -1,7 +1,7 @@ # # spec file for package gtkwave # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,17 +12,17 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # Name: gtkwave -Version: 3.3.101 +Version: 3.3.104 Release: 0 Summary: Waveform viewer for Ditital Signals -License: GPL-2.0+ +License: GPL-2.0-or-later Group: Productivity/Scientific/Electronics -Url: http://gtkwave.sourceforge.net/ +URL: http://gtkwave.sourceforge.net/ Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz BuildRequires: fdupes BuildRequires: flex ++++++ gtkwave-3.3.101.tar.gz -> gtkwave-3.3.104.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/AUTHORS new/gtkwave-3.3.104/AUTHORS --- old/gtkwave-3.3.101/AUTHORS 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/AUTHORS 2020-02-14 06:07:29.000000000 +0100 @@ -1,13 +1,13 @@ -GTKWave Wave Viewer is Copyright (C) 1999-2019 Tony Bybell. -Windows compatibility and PS/MIF routines are Copyright (C) 1999-2019 Udi Finkelstein. -Context support is Copyright (C) 2007-2019 Kermin Elliott Fleming. -Trace group support is Copyright (C) 2009-2019 Donald Baltus. -GHW and additional GUI support is Copyright (C) 2005-2019 Tristan Gingold. -Analog support is Copyright (C) 2005-2019 Thomas Sailer. -External DnD support is Copyright (C) 2008-2019 Concept Engineering GmbH. -FastLZ is Copyright (C) 2005-2019 Ariya Hidayat. +GTKWave Wave Viewer is Copyright (C) 1999-2020 Tony Bybell. +Windows compatibility and PS/MIF routines are Copyright (C) 1999-2020 Udi Finkelstein. +Context support is Copyright (C) 2007-2020 Kermin Elliott Fleming. +Trace group support is Copyright (C) 2009-2020 Donald Baltus. +GHW and additional GUI support is Copyright (C) 2005-2020 Tristan Gingold. +Analog support is Copyright (C) 2005-2020 Thomas Sailer. +External DnD support is Copyright (C) 2008-2020 Concept Engineering GmbH. +FastLZ is Copyright (C) 2005-2020 Ariya Hidayat. Some public domain clip art by contributors at http://www.sxc.hu/ website. Hierarchy marker icons from the Silk icons set by Mark James found at the http://www.famfamfam.com/lab/icons/silk/ website. Portions of the TCL implementation, tcl_np.c and tcl_np.h are copyrighted by the Regents of the University of California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState Corporation, and other parties. -NSAlert is Copyright (C) 2011-2019 Philipp Mayerhofer. -LZ4 is Copyright (C) 2011-2019 Yann Collet. +NSAlert is Copyright (C) 2011-2020 Philipp Mayerhofer. +LZ4 is Copyright (C) 2011-2020 Yann Collet. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/ChangeLog new/gtkwave-3.3.104/ChangeLog --- old/gtkwave-3.3.101/ChangeLog 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/ChangeLog 2020-02-14 06:07:29.000000000 +0100 @@ -1709,3 +1709,17 @@ of 10 roundoff errors. Remove register keyword where applicable as is deprecated. Added --saveonexit gtkwave command line option. +3.3.102 21sep19 Remove redundant TREE_VHDL_ST_PACKAGE from SST exclude. + Added addCommentTracesFromList tcl command from user patch. + Harden savefile loader for missing group start on vectors. + Preliminary VHDL support for wlf2vcd. + Add missing return value checks on mmap() in FST writer. +3.3.103 03nov19 Fix MAP_FAILED missing for MinGW. + Fix to make the coloration red on 'u' traces. (Bug from + Dinotrace-like rendering in 3.3.96.) + Typo fix on missing group start on vectors. +3.3.104 24jan20 Added support for loading .vf files (provided FSDB reader + libraries are enabled). + Added support for dumping variable types in vcd saveer, not + just using "wire" for non-reals/strings. + Fix for uninitialized values at time 0 for FST, FSDB loaders. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/LICENSE.TXT new/gtkwave-3.3.104/LICENSE.TXT --- old/gtkwave-3.3.101/LICENSE.TXT 2019-05-23 05:15:28.000000000 +0200 +++ new/gtkwave-3.3.104/LICENSE.TXT 2020-02-14 06:07:29.000000000 +0100 @@ -1,14 +1,14 @@ ########################################################################## -GTKWave 3.3.101 Wave Viewer is Copyright (C) 1999-2019 Tony Bybell. -Portions of GTKWave are Copyright (C) 1999-2019 Udi Finkelstein. -Context support is Copyright (C) 2007-2019 Kermin Elliott Fleming. -Trace group support is Copyright (C) 2009-2019 Donald Baltus. -GHW and additional GUI support is Copyright (C) 2005-2019 Tristan Gingold. -Analog support is Copyright (C) 2005-2019 Thomas Sailer. -External DnD support is Copyright (C) 2008-2019 Concept Engineering GmbH. -FastLZ is Copyright (C) 2005-2019 Ariya Hidayat. -LZ4 is Copyright (C) 2011-2019 Yann Collet. +GTKWave 3.3.104 Wave Viewer is Copyright (C) 1999-2020 Tony Bybell. +Portions of GTKWave are Copyright (C) 1999-2020 Udi Finkelstein. +Context support is Copyright (C) 2007-2020 Kermin Elliott Fleming. +Trace group support is Copyright (C) 2009-2020 Donald Baltus. +GHW and additional GUI support is Copyright (C) 2005-2020 Tristan Gingold. +Analog support is Copyright (C) 2005-2020 Thomas Sailer. +External DnD support is Copyright (C) 2008-2020 Concept Engineering GmbH. +FastLZ is Copyright (C) 2005-2020 Ariya Hidayat. +LZ4 is Copyright (C) 2011-2020 Yann Collet. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/configure new/gtkwave-3.3.104/configure --- old/gtkwave-3.3.101/configure 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/configure 2020-02-14 06:07:29.000000000 +0100 @@ -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.101. +# Generated by GNU Autoconf 2.69 for gtkwave 3.3.104. # # Report bugs to <[email protected]>. # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='gtkwave' PACKAGE_TARNAME='gtkwave' -PACKAGE_VERSION='3.3.101' -PACKAGE_STRING='gtkwave 3.3.101' +PACKAGE_VERSION='3.3.104' +PACKAGE_STRING='gtkwave 3.3.104' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1405,7 +1405,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.101 to adapt to many kinds of systems. +\`configure' configures gtkwave 3.3.104 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1471,7 +1471,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gtkwave 3.3.101:";; + short | recursive ) echo "Configuration of gtkwave 3.3.104:";; esac cat <<\_ACEOF @@ -1630,7 +1630,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gtkwave configure 3.3.101 +gtkwave configure 3.3.104 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2274,7 +2274,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.101, which was +It was created by gtkwave $as_me 3.3.104, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3141,7 +3141,7 @@ # Define the identity of the package. PACKAGE='gtkwave' - VERSION='3.3.101' + VERSION='3.3.104' cat >>confdefs.h <<_ACEOF @@ -11499,7 +11499,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.101, which was +This file was extended by gtkwave $as_me 3.3.104, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11565,7 +11565,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.101 +gtkwave config.status 3.3.104 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.101/configure.ac new/gtkwave-3.3.104/configure.ac --- old/gtkwave-3.3.101/configure.ac 2019-05-23 05:15:28.000000000 +0200 +++ new/gtkwave-3.3.104/configure.ac 2020-02-14 06:07:29.000000000 +0100 @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT(gtkwave, 3.3.101, [email protected]) +AC_INIT(gtkwave, 3.3.104, [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.101/contrib/bundle_for_osx/Info-gtkwave.plist new/gtkwave-3.3.104/contrib/bundle_for_osx/Info-gtkwave.plist --- old/gtkwave-3.3.101/contrib/bundle_for_osx/Info-gtkwave.plist 2019-05-23 05:15:28.000000000 +0200 +++ new/gtkwave-3.3.104/contrib/bundle_for_osx/Info-gtkwave.plist 2020-02-14 06:07:29.000000000 +0100 @@ -8,7 +8,7 @@ <key>CFBundleExecutable</key> <string>gtkwave</string> <key>CFBundleGetInfoString</key> - <string>3.3.101, (C) 1999-2019 Tony Bybell http://gtkwave.sourceforge.net</string> + <string>3.3.104, (C) 1999-2020 Tony Bybell http://gtkwave.sourceforge.net</string> <key>CFBundleIconFile</key> <string>gtkwave.icns</string> <key>CFBundleIdentifier</key> @@ -18,13 +18,13 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>3.3.101</string> + <string>3.3.104</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> - <string>3.3.101</string> + <string>3.3.104</string> <key>NSHumanReadableCopyright</key> - <string>Copyright 1999 - 2019 Tony Bybell, GNU General Public License.</string> + <string>Copyright 1999 - 2020 Tony Bybell, GNU General Public License.</string> <key>LSMinimumSystemVersion</key> <string>10.6</string> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/contrib/wlf2vcd/wlf2vcd.c new/gtkwave-3.3.104/contrib/wlf2vcd/wlf2vcd.c --- old/gtkwave-3.3.101/contrib/wlf2vcd/wlf2vcd.c 2019-05-23 05:15:28.000000000 +0200 +++ new/gtkwave-3.3.104/contrib/wlf2vcd/wlf2vcd.c 2020-02-14 06:07:29.000000000 +0100 @@ -17,6 +17,8 @@ /* definition of WlfVreg from wlf_api.h */ #define WLF2VCD_MVL4 "01zx" +#define WLF2VCD_MVL9 "ux01zwlh-" +static const char *wlf_mvl9[9] = {"'U'", "'X'", "'0'", "'1'", "'Z'", "'W'", "'L'", "'H'", "'-'"}; typedef struct WlfGlobalContext { @@ -31,6 +33,8 @@ unsigned int max_bits; unsigned int num_aliases; +unsigned is_vhdl : 1; + unsigned char *value_string; int *archive_number; WlfSymbolId *archive_sym; @@ -41,9 +45,10 @@ static void AddSymbolToCB( WlfSymbolId sym, unsigned int vcdid, - unsigned int num_bits, + int num_bits, unsigned int is_real, unsigned int is_vbit, + unsigned int is_vhbit, unsigned int is_vreg ); @@ -58,6 +63,7 @@ unsigned int num_bits; unsigned is_real : 1; unsigned is_vbit : 1; +unsigned is_vhbit : 1; unsigned is_vreg : 1; } cbData; @@ -108,6 +114,7 @@ WlfIterId iter; WlfSymbolId sym; int cnt; +WlfDataType vtyp; /* create an iterator to retrieve children of top */ iter = wlfSymChildren64(top, wlfSelAll); @@ -119,6 +126,11 @@ cnt = wlfSymPropInt(sym, WLF_PROP_SUBELEMENT_COUNT); WlfSymbolSel64 typ = wlfSymPropSymbolSel64(sym, WLF_PROP_SYMBOL_TYPE); + if(typ & wlfSelVhdlScopes) + { + wgc.is_vhdl = 1; + } + if(typ & (wlfSelVhdlScopes | wlfSelVlogScopes)) { wgc.num_scopes++; @@ -126,21 +138,32 @@ else { WlfTypeId wid = wlfSymPropTypeId(sym, WLF_PROP_TYPE_ID); - WlfDataType vtyp = wlfTypePropDataType(wid, WLF_TYPE_TYPE); + vtyp = wlfTypePropDataType(wid, WLF_TYPE_TYPE); + if(vtyp == wlfTypeRecord) + { + // fprintf(stderr, "wlfTypeRecord %d\n", cnt); + wgc.num_scopes++; + } + else if(vtyp != wlfTypeArray) /* still possibly have to recurse */ { int rgh = wlfTypePropInt(wid, WLF_TYPE_ARRAY_RIGHT); int lft = wlfTypePropInt(wid, WLF_TYPE_ARRAY_LEFT); int len = wlfTypePropInt(wid, WLF_TYPE_ARRAY_LENGTH); + if(vtyp == wlfTypeScalar) + { + lft = 31; rgh = 0; len = 32; + } + wgc.num_symbols++; if(len > wgc.max_bits) wgc.max_bits = len; } } - /* recurse through the children, but block out bitblasted children */ - if(cnt<=0) + /* recurse through the children, but block out bitblasted children (except vhdl) */ + if((cnt<=0) || (wgc.is_vhdl)) { countSubElements(sym); } @@ -267,6 +290,7 @@ unsigned int is_real = 0; unsigned int is_vbit = 0; + unsigned int is_vhbit = 0; unsigned int num_bits = 0; unsigned int is_vreg = 0; char *vartype = NULL; @@ -312,7 +336,7 @@ case wlfSelNamedEvent: vartype = "event"; break; /* wlfSelHdlSignals */ - case wlfSelSignal: + case wlfSelSignal: vartype = "wire"; break; break; case wlfSelNet: vartype = "wire"; break; @@ -323,7 +347,8 @@ case wlfSelGeneric: case wlfSelAlias: - default: break; + default: fprintf(stderr, "Type: %d\n", typ); exit(255); + break; } WlfModeSel ptyp = wlfSymPropModeSel(sym, WLF_PROP_PORT_TYPE); @@ -333,15 +358,23 @@ { wgc.prev_hier[wgc.prev_hier_len - 1] = 0; char *pmod = strrchr(wgc.prev_hier, '/'); + char *dmod = strrchr(wgc.prev_hier, '.'); + if(dmod && (dmod - pmod > 0)) pmod = dmod; *(pmod + 1) = 0; wgc.prev_hier_len = pmod - wgc.prev_hier + 1; printf("$upscope $end\n"); } - if(typ & (wlfSelVhdlScopes | wlfSelVlogScopes)) + WlfTypeId wid = wlfSymPropTypeId(sym, WLF_PROP_TYPE_ID); + WlfDataType vtyp = wlfTypePropDataType(wid, WLF_TYPE_TYPE); + + if((typ & (wlfSelVhdlScopes | wlfSelVlogScopes)) || (vtyp == wlfTypeRecord)) { char *ls = strrchr(name, '/'); + char *ds = strrchr(name, '.'); + if(ds && (ds - ls > 0)) ls = ds; + char *sname = ls ? (ls+1) : name; printf("$scope %s %s $end\n", scopetype, sname); @@ -353,20 +386,47 @@ int hlen = strlen(name); wgc.prev_hier = malloc(hlen + 1 + 1); memcpy(wgc.prev_hier, name, hlen); - wgc.prev_hier[hlen] = '/'; + wgc.prev_hier[hlen] = (vtyp == wlfTypeRecord) ? '.' : '/'; wgc.prev_hier[(wgc.prev_hier_len = hlen + 1)] = 0; } else { - WlfTypeId wid = wlfSymPropTypeId(sym, WLF_PROP_TYPE_ID); - WlfDataType vtyp = wlfTypePropDataType(wid, WLF_TYPE_TYPE); - if(vtyp != wlfTypeArray) /* still possibly have to recurse, depends on value of cnt below */ { int rgh = wlfTypePropInt(wid, WLF_TYPE_ARRAY_RIGHT); int lft = wlfTypePropInt(wid, WLF_TYPE_ARRAY_LEFT); int len = wlfTypePropInt(wid, WLF_TYPE_ARRAY_LENGTH); + if(vtyp == wlfTypeScalar) + { + lft = 31; rgh = 0; len = 32; + is_vbit = 1; is_vhbit = 0; is_real = 0; is_vreg = 0; + } + + if(vtyp == wlfTypeEnum) + { + char **enumLiterals; + int i, count; + wlfEnumLiterals(wid, &enumLiterals, &count); + if(count == 9) + { + for(i=0;i<9;i++) + { + if(strcmp(enumLiterals[i], wlf_mvl9[i])) + { + break; + } + } + if(i == 9) + { + is_vhbit = 1; + is_vbit = 0; + lft = rgh = 0; + len = 1; + } + } + } + if((is_real) || (vtyp == wlfTypeReal) || (vtyp == wlfTypeVlogReal)) { is_real = 1; @@ -387,7 +447,7 @@ if(!vcdid) { - AddSymbolToCB(sym, ++wgc.vcdid_added, num_bits = len, is_real, is_vbit, is_vreg); + AddSymbolToCB(sym, ++wgc.vcdid_added, num_bits = len, is_real, is_vbit, is_vhbit, is_vreg); vcdid = wgc.vcdid_added; if(arch >= 0) { @@ -406,26 +466,57 @@ wgc.num_aliases++; } + char *rsl = strrchr(name, '.'); + if(!rsl) rsl = strrchr(name, '/'); + + char *lp = strrchr(rsl, '('); + char *rp = strrchr(rsl, ')'); + char *lp2 = NULL, *rp2 = NULL; + if(lp && rp) + { + *lp = '['; *rp = ']'; + + lp2 = strrchr(rsl, '('); + rp2 = strrchr(rsl, ')'); + if(lp2 && rp2) + { + *lp2 = '['; *rp2 = ']'; + } + else + { + lp2 = rp2 = NULL; + } + } + if((lft != rgh) && (!is_vbit) && (!is_real)) { - printf("$var %s %d %s %s [%d:%d] $end\n", vartype, len, genVcdID(vcdid_str, vcdid), strrchr(name, '/')+1, lft, rgh); + printf("$var %s %d %s %s [%d:%d] $end\n", vartype, len, genVcdID(vcdid_str, vcdid), rsl+1, lft, rgh); } else { if(cnt && (!is_vbit) && (!is_real)) { - printf("$var %s %d %s %s [%d] $end\n", vartype, len, genVcdID(vcdid_str, vcdid), strrchr(name, '/')+1, lft); + printf("$var %s %d %s %s [%d] $end\n", vartype, len, genVcdID(vcdid_str, vcdid), rsl+1, lft); } else { - printf("$var %s %d %s %s $end\n", vartype, len, genVcdID(vcdid_str, vcdid), strrchr(name, '/')+1); + printf("$var %s %d %s %s $end\n", vartype, len, genVcdID(vcdid_str, vcdid), rsl+1); } } + + if(lp && rp) + { + *lp = '('; *rp = ')'; + } + if(lp2 && rp2) + { + *lp2 = '('; *rp2 = ')'; + } } } - /* recurse through the children, but block out bitblasted children */ - if(cnt<=0) + /* recurse through the children, but block out bitblasted children (except vhdl) */ + if((cnt<=0) || (wgc.is_vhdl)) { printSubElements(sym); } @@ -490,7 +581,15 @@ unsigned char *pv = ((cbData*) data)->pv; char *value = wgc.value_string; - if(((cbData*) data)->is_vbit) + if(((cbData*) data)->is_vhbit) + { + for(i=0;i<nbits;i++) + { + value[i] = WLF2VCD_MVL9[*(pv++)]; + } + value[i] = 0; + } + else if(((cbData*) data)->is_vbit) { WlfVbit *ip = (WlfVbit *)pv; int bitrvs = (nbits - 1); @@ -646,9 +745,10 @@ static void AddSymbolToCB( WlfSymbolId sym, unsigned int vcdid, - unsigned int num_bits, + int num_bits, unsigned int is_real, unsigned int is_vbit, + unsigned int is_vhbit, unsigned int is_vreg ) { @@ -664,9 +764,10 @@ pdata->pv = wlfValueGetValue(val); #endif pdata->vcdid = vcdid; - pdata->num_bits = num_bits; + pdata->num_bits = (num_bits < 0) ? 0 : num_bits; // ?? how to fix properly pdata->is_real = is_real; pdata->is_vbit = is_vbit; + pdata->is_vhbit = is_vhbit; pdata->is_vreg = is_vreg; status = wlfAddSignalEventCB(wgc.pack, sym, val, WLF_REQUEST_POSTPONED, sigCb, pdata); if(status != WLF_OK) @@ -693,6 +794,7 @@ wgc.prev_hier = NULL; wgc.prev_hier_len = 0; wgc.vcdid_added = 0; +wgc.is_vhdl = 0; if(argc < 2) { Binary files old/gtkwave-3.3.101/doc/gtkwave.odt and new/gtkwave-3.3.104/doc/gtkwave.odt differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/extload.c new/gtkwave-3.3.104/src/extload.c --- old/gtkwave-3.3.101/src/extload.c 2019-05-23 05:15:28.000000000 +0200 +++ new/gtkwave-3.3.104/src/extload.c 2020-02-14 06:07:29.000000000 +0100 @@ -2171,7 +2171,7 @@ */ void import_extload_trace(nptr np) { -struct HistEnt *htemp, *histent_tail; +struct HistEnt *htemp, *htempx=NULL, *histent_tail; int len, i; struct fac *f; int txidx, txidx_in_trace; @@ -2359,6 +2359,7 @@ htemp->v.h_val = AN_X; /* x */ } } +htempx = htemp; htemp->time = MAX_HISTENT_TIME-1; htemp->next = histent_tail; @@ -2402,11 +2403,11 @@ { if(len>1) { - htemp2->v.h_vector = htemp->v.h_vector; + htemp2->v.h_vector = htempx->v.h_vector; } else { - htemp2->v.h_val = htemp->v.h_val; + htemp2->v.h_val = htempx->v.h_val; } } htemp2->next = htemp; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/fst.c new/gtkwave-3.3.104/src/fst.c --- old/gtkwave-3.3.101/src/fst.c 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/fst.c 2020-02-14 06:07:29.000000000 +0100 @@ -1664,6 +1664,7 @@ else { htemp->v.h_val = AN_X; /* x */ + htempx = htemp; } htemp->time = MAX_HISTENT_TIME-1; htemp->next = histent_tail; @@ -1705,7 +1706,7 @@ } else { - htemp2->v.h_val = htemp->v.h_val; + htemp2->v.h_val = htempx->v.h_val; } htemp2->next = htemp; htemp = htemp2; @@ -1921,6 +1922,7 @@ else { htemp->v.h_val = AN_X; /* x */ + htempx = htemp; } htemp->time = MAX_HISTENT_TIME-1; htemp->next = histent_tail; @@ -1962,7 +1964,7 @@ } else { - htemp2->v.h_val = htemp->v.h_val; + htemp2->v.h_val = htempx->v.h_val; } htemp2->next = htemp; htemp = htemp2; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/gconf.h new/gtkwave-3.3.104/src/gconf.h --- old/gtkwave-3.3.101/src/gconf.h 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/gconf.h 2020-02-14 06:07:29.000000000 +0100 @@ -26,7 +26,7 @@ /* 12345678901234567 */ #define WAVE_GCONF_DIR_LEN (17) -int wave_rpc_id; +extern int wave_rpc_id; void wave_gconf_init(int argc, char **argv); gboolean wave_gconf_client_set_string(const gchar *key, const gchar *val); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/helpers/fst/fstapi.c new/gtkwave-3.3.104/src/helpers/fst/fstapi.c --- old/gtkwave-3.3.101/src/helpers/fst/fstapi.c 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/helpers/fst/fstapi.c 2020-02-14 06:07:29.000000000 +0100 @@ -37,11 +37,15 @@ * */ -#include <config.h> +#ifndef FST_CONFIG_INCLUDE +# define FST_CONFIG_INCLUDE <config.h> +#endif +#include FST_CONFIG_INCLUDE #include "fstapi.h" #include "fastlz.h" #include "lz4.h" +#include <errno.h> #ifndef HAVE_LIBPTHREAD #undef FST_WRITER_PARALLEL @@ -128,6 +132,16 @@ #include <sys/sysctl.h> #endif +#ifdef __GNUC__ +/* Boolean expression more often true than false */ +#define FST_LIKELY(x) __builtin_expect(!!(x), 1) +/* Boolean expression more often false than true */ +#define FST_UNLIKELY(x) __builtin_expect(!!(x), 0) +#else +#define FST_LIKELY(x) (!!(x)) +#define FST_UNLIKELY(x) (!!(x)) +#endif + #define FST_APIMESS "FSTAPI | " /***********************/ @@ -723,6 +737,9 @@ uint32_t *valpos_mem; unsigned char *curval_mem; +unsigned char *outval_mem; /* for two-state / Verilator-style value changes */ +uint32_t outval_alloc_siz; + char *filename; fstHandle maxhandle; @@ -952,6 +969,19 @@ /* * mmap functions */ +static void fstWriterMmapSanity(void *pnt, const char *file, int line, const char *usage) +{ +#if !defined(__CYGWIN__) && !defined(__MINGW32__) +if(pnt == MAP_FAILED) + { + fprintf(stderr, "fstMmap() assigned to %s failed: errno: %d, file %s, line %d.\n", usage, errno, file, line); + perror("Why"); + pnt = NULL; + } +#endif +} + + static void fstWriterCreateMmaps(struct fstWriterContext *xc) { off_t curpos = ftello(xc->handle); @@ -974,12 +1004,20 @@ if(!xc->valpos_mem) { fflush(xc->valpos_handle); - xc->valpos_mem = (uint32_t *)fstMmap(NULL, xc->maxhandle * 4 * sizeof(uint32_t), PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->valpos_handle), 0); + errno = 0; + if(xc->maxhandle) + { + fstWriterMmapSanity(xc->valpos_mem = (uint32_t *)fstMmap(NULL, xc->maxhandle * 4 * sizeof(uint32_t), PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->valpos_handle), 0), __FILE__, __LINE__, "xc->valpos_mem"); + } } if(!xc->curval_mem) { fflush(xc->curval_handle); - xc->curval_mem = (unsigned char *)fstMmap(NULL, xc->maxvalpos, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->curval_handle), 0); + errno = 0; + if(xc->maxvalpos) + { + fstWriterMmapSanity(xc->curval_mem = (unsigned char *)fstMmap(NULL, xc->maxvalpos, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->curval_handle), 0), __FILE__, __LINE__, "xc->curval_handle"); + } } } @@ -1682,7 +1720,8 @@ tlen = ftello(xc->tchn_handle); fstWriterFseeko(xc, xc->tchn_handle, 0, SEEK_SET); -tmem = (unsigned char *)fstMmap(NULL, tlen, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->tchn_handle), 0); +errno = 0; +fstWriterMmapSanity(tmem = (unsigned char *)fstMmap(NULL, tlen, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->tchn_handle), 0), __FILE__, __LINE__, "tmem"); if(tmem) { unsigned long destlen = tlen; @@ -1874,7 +1913,7 @@ if(xc && !xc->already_in_close && !xc->already_in_flush) { - unsigned char *tmem; + unsigned char *tmem = NULL; off_t fixup_offs, tlen, hlen; xc->already_in_close = 1; /* never need to zero this out as it is freed at bottom */ @@ -1890,7 +1929,7 @@ xc->skip_writing_section_hdr = 1; if(!xc->size_limit_locked) { - if(xc->is_initial_time) /* simulation time never advanced so mock up the changes as time zero ones */ + if(FST_UNLIKELY(xc->is_initial_time)) /* simulation time never advanced so mock up the changes as time zero ones */ { fstHandle dupe_idx; @@ -1908,11 +1947,21 @@ } } fstDestroyMmaps(xc, 1); + if(xc->outval_mem) + { + free(xc->outval_mem); xc->outval_mem = NULL; + xc->outval_alloc_siz = 0; + } /* write out geom section */ fflush(xc->geom_handle); tlen = ftello(xc->geom_handle); - tmem = (unsigned char *)fstMmap(NULL, tlen, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->geom_handle), 0); + errno = 0; + if(tlen) + { + fstWriterMmapSanity(tmem = (unsigned char *)fstMmap(NULL, tlen, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->geom_handle), 0), __FILE__, __LINE__, "tmem"); + } + if(tmem) { unsigned long destlen = tlen; @@ -2020,14 +2069,18 @@ { int lz4_maxlen; unsigned char *mem; - unsigned char *hmem; + unsigned char *hmem = NULL; int packed_len; fflush(xc->handle); lz4_maxlen = LZ4_compressBound(xc->hier_file_len); mem = (unsigned char *)malloc(lz4_maxlen); - hmem = (unsigned char *)fstMmap(NULL, xc->hier_file_len, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->hier_handle), 0); + errno = 0; + if(xc->hier_file_len) + { + fstWriterMmapSanity(hmem = (unsigned char *)fstMmap(NULL, xc->hier_file_len, PROT_READ|PROT_WRITE, MAP_SHARED, fileno(xc->hier_handle), 0), __FILE__, __LINE__, "hmem"); + } packed_len = LZ4_compress((char *)hmem, (char *)mem, xc->hier_file_len); fstMunmap(hmem, xc->hier_file_len); @@ -2843,12 +2896,12 @@ uint32_t offs; int len; -if((xc) && (handle <= xc->maxhandle)) +if(FST_LIKELY((xc) && (handle <= xc->maxhandle))) { uint32_t fpos; uint32_t *vm4ip; - if(!xc->valpos_mem) + if(FST_UNLIKELY(!xc->valpos_mem)) { xc->vc_emitted = 1; fstWriterCreateMmaps(xc); @@ -2858,17 +2911,17 @@ vm4ip = &(xc->valpos_mem[4*handle]); len = vm4ip[1]; - if(len) /* len of zero = variable length, use fstWriterEmitVariableLengthValueChange */ + if(FST_LIKELY(len)) /* len of zero = variable length, use fstWriterEmitVariableLengthValueChange */ { - if(!xc->is_initial_time) + if(FST_LIKELY(!xc->is_initial_time)) { fpos = xc->vchg_siz; - if((fpos + len + 10) > xc->vchg_alloc_siz) + if(FST_UNLIKELY((fpos + len + 10) > xc->vchg_alloc_siz)) { xc->vchg_alloc_siz += (xc->fst_break_add_size + len); /* +len added in the case of extremely long vectors and small break add sizes */ xc->vchg_mem = (unsigned char *)realloc(xc->vchg_mem, xc->vchg_alloc_siz); - if(!xc->vchg_mem) + if(FST_UNLIKELY(!xc->vchg_mem)) { fprintf(stderr, FST_APIMESS "Could not realloc() in fstWriterEmitValueChange, exiting.\n"); exit(255); @@ -2953,18 +3006,139 @@ } } +void fstWriterEmitValueChange32(void *ctx, fstHandle handle, + uint32_t bits, uint32_t val) { + char buf[32]; + char *s = buf; + uint32_t i; + for (i = 0; i < bits; ++i) + { + *s++ = '0' + ((val >> (bits - i - 1)) & 1); + } + fstWriterEmitValueChange(ctx, handle, buf); +} +void fstWriterEmitValueChange64(void *ctx, fstHandle handle, + uint32_t bits, uint64_t val) { + char buf[64]; + char *s = buf; + uint32_t i; + for (i = 0; i < bits; ++i) + { + *s++ = '0' + ((val >> (bits - i - 1)) & 1); + } + fstWriterEmitValueChange(ctx, handle, buf); +} +void fstWriterEmitValueChangeVec32(void *ctx, fstHandle handle, + uint32_t bits, const uint32_t *val) { + struct fstWriterContext *xc = (struct fstWriterContext *)ctx; + if (FST_UNLIKELY(bits <= 32)) + { + fstWriterEmitValueChange32(ctx, handle, bits, val[0]); + } + else if(FST_LIKELY(xc)) + { + int bq = bits / 32; + int br = bits & 31; + int i; + int w; + uint32_t v; + unsigned char* s; + if (FST_UNLIKELY(bits > xc->outval_alloc_siz)) + { + xc->outval_alloc_siz = bits*2 + 1; + xc->outval_mem = (unsigned char*)realloc(xc->outval_mem, xc->outval_alloc_siz); + if (FST_UNLIKELY(!xc->outval_mem)) + { + fprintf(stderr, + FST_APIMESS "Could not realloc() in fstWriterEmitValueChangeVec32, exiting.\n"); + exit(255); + } + } + s = xc->outval_mem; + { + w = bq; + v = val[w]; + for (i = 0; i < br; ++i) + { + *s++ = '0' + ((v >> (br - i - 1)) & 1); + } + } + for (w = bq - 1; w >= 0; --w) + { + v = val[w]; + for (i = (32 - 4); i >= 0; i -= 4) { + s[0] = '0' + ((v >> (i + 3)) & 1); + s[1] = '0' + ((v >> (i + 2)) & 1); + s[2] = '0' + ((v >> (i + 1)) & 1); + s[3] = '0' + ((v >> (i + 0)) & 1); + s += 4; + } + } + fstWriterEmitValueChange(ctx, handle, xc->outval_mem); + } +} +void fstWriterEmitValueChangeVec64(void *ctx, fstHandle handle, + uint32_t bits, const uint64_t *val) { + struct fstWriterContext *xc = (struct fstWriterContext *)ctx; + if (FST_UNLIKELY(bits <= 64)) + { + fstWriterEmitValueChange64(ctx, handle, bits, val[0]); + } + else if(FST_LIKELY(xc)) + { + int bq = bits / 64; + int br = bits & 63; + int i; + int w; + uint32_t v; + unsigned char* s; + if (FST_UNLIKELY(bits > xc->outval_alloc_siz)) + { + xc->outval_alloc_siz = bits*2 + 1; + xc->outval_mem = (unsigned char*)realloc(xc->outval_mem, xc->outval_alloc_siz); + if (FST_UNLIKELY(!xc->outval_mem)) + { + fprintf(stderr, + FST_APIMESS "Could not realloc() in fstWriterEmitValueChangeVec64, exiting.\n"); + exit(255); + } + } + s = xc->outval_mem; + { + w = bq; + v = val[w]; + for (i = 0; i < br; ++i) + { + *s++ = '0' + ((v >> (br - i - 1)) & 1); + } + } + for (w = bq - 1; w >= 0; --w) { + v = val[w]; + for (i = (64 - 4); i >= 0; i -= 4) + { + s[0] = '0' + ((v >> (i + 3)) & 1); + s[1] = '0' + ((v >> (i + 2)) & 1); + s[2] = '0' + ((v >> (i + 1)) & 1); + s[3] = '0' + ((v >> (i + 0)) & 1); + s += 4; + } + } + fstWriterEmitValueChange(ctx, handle, xc->outval_mem); + } +} + void fstWriterEmitVariableLengthValueChange(void *ctx, fstHandle handle, const void *val, uint32_t len) { struct fstWriterContext *xc = (struct fstWriterContext *)ctx; const unsigned char *buf = (const unsigned char *)val; -if((xc) && (handle <= xc->maxhandle)) +if(FST_LIKELY((xc) && (handle <= xc->maxhandle))) { uint32_t fpos; uint32_t *vm4ip; - if(!xc->valpos_mem) + if(FST_UNLIKELY(!xc->valpos_mem)) { xc->vc_emitted = 1; fstWriterCreateMmaps(xc); @@ -2974,15 +3148,15 @@ vm4ip = &(xc->valpos_mem[4*handle]); /* there is no initial time dump for variable length value changes */ - if(!vm4ip[1]) /* len of zero = variable length */ + if(FST_LIKELY(!vm4ip[1])) /* len of zero = variable length */ { fpos = xc->vchg_siz; - if((fpos + len + 10 + 5) > xc->vchg_alloc_siz) + if(FST_UNLIKELY((fpos + len + 10 + 5) > xc->vchg_alloc_siz)) { xc->vchg_alloc_siz += (xc->fst_break_add_size + len + 5); /* +len added in the case of extremely long vectors and small break add sizes */ xc->vchg_mem = (unsigned char *)realloc(xc->vchg_mem, xc->vchg_alloc_siz); - if(!xc->vchg_mem) + if(FST_UNLIKELY(!xc->vchg_mem)) { fprintf(stderr, FST_APIMESS "Could not realloc() in fstWriterEmitVariableLengthValueChange, exiting.\n"); exit(255); @@ -3004,7 +3178,7 @@ int skip = 0; if(xc) { - if(xc->is_initial_time) + if(FST_UNLIKELY(xc->is_initial_time)) { if(xc->size_limit_locked) /* this resets xc->is_initial_time to one */ { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/helpers/fst/fstapi.h new/gtkwave-3.3.104/src/helpers/fst/fstapi.h --- old/gtkwave-3.3.101/src/helpers/fst/fstapi.h 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/helpers/fst/fstapi.h 2020-02-14 06:07:29.000000000 +0100 @@ -355,6 +355,14 @@ void fstWriterEmitDumpActive(void *ctx, int enable); void fstWriterEmitEnumTableRef(void *ctx, fstEnumHandle handle); void fstWriterEmitValueChange(void *ctx, fstHandle handle, const void *val); +void fstWriterEmitValueChange32(void *ctx, fstHandle handle, + uint32_t bits, uint32_t val); +void fstWriterEmitValueChange64(void *ctx, fstHandle handle, + uint32_t bits, uint64_t val); +void fstWriterEmitValueChangeVec32(void *ctx, fstHandle handle, + uint32_t bits, const uint32_t *val); +void fstWriterEmitValueChangeVec64(void *ctx, fstHandle handle, + uint32_t bits, const uint64_t *val); void fstWriterEmitVariableLengthValueChange(void *ctx, fstHandle handle, const void *val, uint32_t len); void fstWriterEmitTimeChange(void *ctx, uint64_t tim); void fstWriterFlushContext(void *ctx); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/main.c new/gtkwave-3.3.104/src/main.c --- old/gtkwave-3.3.101/src/main.c 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/main.c 2020-02-14 06:07:29.000000000 +0100 @@ -1467,6 +1467,7 @@ #if defined(EXTLOAD_SUFFIX) if( (suffix_check(GLOBALS->loaded_file_name, "."EXTLOAD_SUFFIX ) && !opt_vcd) || + (suffix_check(GLOBALS->loaded_file_name, ".vf" ) && !opt_vcd) || /* virtual file */ (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 */ ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/savefile.c new/gtkwave-3.3.104/src/savefile.c --- old/gtkwave-3.3.101/src/savefile.c 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/savefile.c 2020-02-14 06:07:29.000000000 +0100 @@ -995,6 +995,7 @@ char *prefix, *suffix, *new; char *prefix_init, *w2_init; unsigned int mode; + int current_grp_depth = -1; if(!(len=strlen(w))) return(0); if(*(w+len-1)=='\n') @@ -1249,6 +1250,8 @@ b = maketyp ? makevec(prefix+1,w2) : makevec_annotated(prefix+1,w2); /* '#' vs ':' cases... */ + if(GLOBALS->default_flags&TR_GRP_BEGIN) { current_grp_depth = GLOBALS->group_depth; } + if(b) { if((v=bits2vector(b))) @@ -1257,7 +1260,7 @@ AddVector(v, alias); free_2(b->name); b->name=NULL; - return(v!=NULL); + goto grp_bot; } else { @@ -1312,6 +1315,8 @@ } } +grp_bot: + if((GLOBALS->default_flags&TR_GRP_BEGIN) && (current_grp_depth >= 0) && (current_grp_depth == GLOBALS->group_depth)) { AddBlankTrace(prefix+1); } return(v!=NULL); } else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/tcl_commands.c new/gtkwave-3.3.104/src/tcl_commands.c --- old/gtkwave-3.3.101/src/tcl_commands.c 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/tcl_commands.c 2020-02-14 06:07:29.000000000 +0100 @@ -1168,6 +1168,44 @@ return(TCL_OK); } +static int gtkwavetcl_addCommentTracesFromList(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) +{ +char reportString[33]; +Tcl_Obj *aobj; + +if(objc==2) + { + char *s = Tcl_GetString(objv[1]); + char** elem = NULL; + int i, l = 0; + + elem = zSplitTclList(s, &l); + if(elem) + { + for(i=0;i<l;i++) + { + InsertBlankTrace(elem[i], 0); + } + free_2(elem); + } + + GLOBALS->signalwindow_width_dirty=1; + MaxSignalLength(); + signalarea_configure_event(GLOBALS->signalarea, NULL); + wavearea_configure_event(GLOBALS->wavearea, NULL); + + sprintf(reportString, "%d", l); + + aobj = Tcl_NewStringObj(reportString, -1); + Tcl_SetObjResult(interp, aobj); + } + else + { + return(gtkwavetcl_badNumArgs(clientData, interp, objc, objv, 1)); + } + +return(TCL_OK); +} static int gtkwavetcl_addSignalsFromList(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { @@ -2244,6 +2282,7 @@ tcl_cmdstruct gtkwave_commands[] = { + {"addCommentTracesFromList", gtkwavetcl_addCommentTracesFromList}, {"addSignalsFromList", gtkwavetcl_addSignalsFromList}, {"deleteSignalsFromList", gtkwavetcl_deleteSignalsFromList}, {"deleteSignalsFromListIncludingDuplicates", gtkwavetcl_deleteSignalsFromListIncludingDuplicates}, @@ -2295,7 +2334,11 @@ {"installFileFilter", gtkwavetcl_installFileFilter}, {"installProcFilter", gtkwavetcl_installProcFilter}, {"installTransFilter", gtkwavetcl_installTransFilter}, + {"loadFile", gtkwavetcl_loadFile}, {"nop", gtkwavetcl_nop}, + {"presentWindow", gtkwavetcl_presentWindow}, + {"processTclList", gtkwavetcl_processTclList}, /* not for general-purpose use */ + {"reLoadFile", gtkwavetcl_reLoadFile}, {"setBaselineMarker", gtkwavetcl_setBaselineMarker}, {"setCurrentTranslateEnums", gtkwavetcl_setCurrentTranslateEnums}, {"setCurrentTranslateFile", gtkwavetcl_setCurrentTranslateFile}, @@ -2313,13 +2356,9 @@ {"setWindowStartTime", gtkwavetcl_setWindowStartTime}, {"setZoomFactor", gtkwavetcl_setZoomFactor}, {"setZoomRangeTimes", gtkwavetcl_setZoomRangeTimes}, - {"loadFile", gtkwavetcl_loadFile}, - {"reLoadFile", gtkwavetcl_reLoadFile}, - {"presentWindow", gtkwavetcl_presentWindow}, {"showSignal", gtkwavetcl_showSignal}, - {"unhighlightSignalsFromList", gtkwavetcl_unhighlightSignalsFromList}, {"signalChangeList", gtkwavetcl_signalChangeList}, /* changed from signal_change_list for consistency! */ - {"processTclList", gtkwavetcl_processTclList}, /* not for general-purpose use */ + {"unhighlightSignalsFromList", gtkwavetcl_unhighlightSignalsFromList}, {"", NULL} /* sentinel */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/tree.c new/gtkwave-3.3.104/src/tree.c --- old/gtkwave-3.3.101/src/tree.c 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/tree.c 2020-02-14 06:07:29.000000000 +0100 @@ -1121,7 +1121,6 @@ else if(!strcmp(p, "VHDL_ST_GENFOR")) { exclhier |= exclone << TREE_VHDL_ST_GENFOR; } else if(!strcmp(p, "VHDL_ST_INSTANCE")) { exclhier |= exclone << TREE_VHDL_ST_INSTANCE; } else if(!strcmp(p, "VHDL_ST_PACKAGE")) { exclhier |= exclone << TREE_VHDL_ST_PACKAGE; } - else if(!strcmp(p, "VHDL_ST_PACKAGE")) { exclhier |= exclone << TREE_VHDL_ST_PACKAGE; } else if(!strcmp(p, "VHDL_ST_SIGNAL")) { exclhier |= exclone << TREE_VHDL_ST_SIGNAL; } else if(!strcmp(p, "VHDL_ST_PORTIN")) { exclhier |= exclone << TREE_VHDL_ST_PORTIN; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/vcd_saver.c new/gtkwave-3.3.104/src/vcd_saver.c --- old/gtkwave-3.3.101/src/vcd_saver.c 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/vcd_saver.c 2020-02-14 06:07:29.000000000 +0100 @@ -15,6 +15,8 @@ #include "hierpack.h" #include <time.h> +WAVE_NODEVARTYPE_STR + static void w32redirect_fprintf(int is_trans, FILE *sfd, const char *format, ...) { #if defined _MSC_VER || defined __MINGW32__ @@ -608,7 +610,7 @@ } else { - w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$var wire 1 %s %s $end\n", vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$var %s 1 %s %s $end\n", vartype_strings[GLOBALS->hp_vcd_saver_c_1[i]->item->vartype], vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); } } else @@ -620,7 +622,7 @@ } else { - w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$var wire %d %s %s $end\n", len, vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); + w32redirect_fprintf(is_trans, GLOBALS->f_vcd_saver_c_1, "$var %s %d %s %s $end\n", vartype_strings[GLOBALS->hp_vcd_saver_c_1[i]->item->vartype], len, vcdid(GLOBALS->hp_vcd_saver_c_1[i]->val, export_typ), netname); } GLOBALS->hp_vcd_saver_c_1[i]->len = len; if(len > max_len) max_len = len; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/version.h new/gtkwave-3.3.104/src/version.h --- old/gtkwave-3.3.101/src/version.h 2019-05-23 05:15:28.000000000 +0200 +++ new/gtkwave-3.3.104/src/version.h 2020-02-14 06:07:29.000000000 +0100 @@ -10,6 +10,6 @@ #ifndef WAVE_VERSION_H #define WAVE_VERSION_H -#define WAVE_VERSION_INFO "GTKWave Analyzer v" PACKAGE_VERSION " (w)1999-2019 BSI" +#define WAVE_VERSION_INFO "GTKWave Analyzer v" PACKAGE_VERSION " (w)1999-2020 BSI" #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gtkwave-3.3.101/src/wavewindow.c new/gtkwave-3.3.104/src/wavewindow.c --- old/gtkwave-3.3.101/src/wavewindow.c 2019-05-23 05:15:27.000000000 +0200 +++ new/gtkwave-3.3.104/src/wavewindow.c 2020-02-14 06:07:29.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) Tony Bybell 1999-2012. + * Copyright (c) Tony Bybell 1999-2019. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -4184,7 +4184,7 @@ } else { - if(type != AN_X) + if((type != AN_X) && (type != AN_U)) { c = GLOBALS->gc.gc_vbox_wavewindow_c_1; } @@ -4997,7 +4997,7 @@ } else { - if(type != AN_X) + if((type != AN_X) && (type != AN_U)) { c = GLOBALS->gc.gc_vbox_wavewindow_c_1; }
