Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gtkwave for openSUSE:Factory checked 
in at 2026-10-26 09:59:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gtkwave (Old)
 and      /work/SRC/openSUSE:Factory/.gtkwave.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gtkwave"

Mon Oct 26 09:59:52 2026 rev:36 rq:1392355 version:3.3.128

Changes:
--------
--- /work/SRC/openSUSE:Factory/gtkwave/gtkwave.changes  2026-03-24 
18:48:56.598640270 +0100
+++ /work/SRC/openSUSE:Factory/.gtkwave.new.2252680/gtkwave.changes     
2026-10-26 10:00:24.076716329 +0100
@@ -1,0 +2,19 @@
+Sun Oct 25 06:52:46 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 3.3.128
+  * Hurd compile fix.
+  * Update bundled lz4 to 1.10.0.
+- Changes in 3.3.127
+  * Fix for fixed point shift that does not disable it on the specify
+    value change menu option.
+  * Changed ps2pdf to pstopdf on Mac as ps2pdf was removed by Sonoma.
+  * Warnings fix in vcd2fst for missing string.h include.
+  * Added FST_ST_SV_ARRAY (FST) and "sv_array" (VCD) for arrays.
+  * Wrote replacement for gdk_pixbuf_new_from_xpm_data.
+  * Update FSDB to handle FST_ST_SV_ARRAY, FSDB_ST_SV_INTERFACEPORT_REF
+    and FSDB_VT_STRING.
+  * Added "SV_ST_ARRAY" to exclude file parsing on init.
+  * Fix use after free of GLOBALS->entrybox_text in
+    regexp_highlight_generic().
+
+-------------------------------------------------------------------

Old:
----
  gtkwave-gtk3-3.3.126.tar.gz

New:
----
  gtkwave-gtk3-3.3.128.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gtkwave.spec ++++++
--- /var/tmp/diff_new_pack.mzoNHZ/_old  2026-10-26 10:00:26.042798816 +0100
+++ /var/tmp/diff_new_pack.mzoNHZ/_new  2026-10-26 10:00:26.048799068 +0100
@@ -17,11 +17,10 @@
 
 
 Name:           gtkwave
-Version:        3.3.126
+Version:        3.3.128
 Release:        0
 Summary:        Waveform viewer for Ditital Signals
 License:        GPL-2.0-or-later
-Group:          Productivity/Scientific/Electronics
 URL:            https://gtkwave.sourceforge.net/
 Source0:        
https://downloads.sourceforge.net/%{name}/%{name}-gtk3-%{version}.tar.gz
 BuildRequires:  fdupes
@@ -44,7 +43,6 @@
 
 %package        doc
 Summary:        Documentation for GTKWave
-Group:          Documentation/Other
 Requires:       %{name} = %{version}
 BuildArch:      noarch
 
@@ -57,7 +55,6 @@
 
 %package        examples
 Summary:        Examples for GTKWave
-Group:          Documentation/Other
 Requires:       %{name} = %{version}
 BuildArch:      noarch
 

++++++ gtkwave-gtk3-3.3.126.tar.gz -> gtkwave-gtk3-3.3.128.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/COPYING 
new/gtkwave-gtk3-3.3.128/COPYING
--- old/gtkwave-gtk3-3.3.126/COPYING    2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/COPYING    2026-07-21 04:27:37.000000000 +0200
@@ -2,7 +2,7 @@
                        Version 2, June 1991
 
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ <https://fsf.org/>
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -304,8 +304,8 @@
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+    with this program; if not, see
+    <https://www.gnu.org/licenses/>.
 
 Also add information on how to contact you by electronic and paper mail.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/ChangeLog 
new/gtkwave-gtk3-3.3.128/ChangeLog
--- old/gtkwave-gtk3-3.3.126/ChangeLog  2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/ChangeLog  2026-07-21 04:27:37.000000000 +0200
@@ -1953,3 +1953,17 @@
                Updated libghw to current version.
                Changed behavior of X search in pattern search so it is
                matched by a single X bit.
+3.3.127 31mar26        Fix for fixed point shift that does not disable it on
+               the specify value change menu option.
+               Changed ps2pdf to pstopdf on Mac as ps removed by Sonoma.
+               Warnings fix in vcd2fst for missing string.h include.
+               Added FST_ST_SV_ARRAY (FST) and "sv_array" (VCD) for 
+               arrays (gtkwave/libfst#17).
+               Wrote replacement for gdk_pixbuf_new_from_xpm_data.
+               Update FSDB to handle FST_ST_SV_ARRAY (VCS emits this),
+               FSDB_ST_SV_INTERFACEPORT_REF, and FSDB_VT_STRING.
+               Added "SV_ST_ARRAY" to exclude file parsing on init.
+                Fix use after free of GLOBALS->entrybox_text in
+                regexp_highlight_generic().
+3.3.128        18jun26 Hurd compile fix.
+               Update lz4 to 1.10.0.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/LICENSE.TXT 
new/gtkwave-gtk3-3.3.128/LICENSE.TXT
--- old/gtkwave-gtk3-3.3.126/LICENSE.TXT        2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/LICENSE.TXT        2026-07-21 04:27:37.000000000 
+0200
@@ -1,6 +1,6 @@
 ##########################################################################
 
-GTKWave 3.3.126 Wave Viewer is Copyright (C) 1999-2026 Tony Bybell.  
+GTKWave 3.3.128 Wave Viewer is Copyright (C) 1999-2026 Tony Bybell.  
 Portions of GTKWave are Copyright (C) 1999-2026 Udi Finkelstein. 
 Context support is Copyright (C) 2007-2026 Kermin Elliott Fleming.
 Trace group support is  Copyright (C) 2009-2026 Donald Baltus.
@@ -21,8 +21,8 @@
 for more details.
 
 You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc., 51
-Franklin Street -  Suite 500, Boston, MA 02110-1335, USA.
+with this program; if not, see
+<https://www.gnu.org/licenses/>.
 
 ##########################################################################
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/configure 
new/gtkwave-gtk3-3.3.128/configure
--- old/gtkwave-gtk3-3.3.126/configure  2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/configure  2026-07-21 04:27:37.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-gtk3 3.3.126.
+# Generated by GNU Autoconf 2.69 for gtkwave-gtk3 3.3.128.
 #
 # Report bugs to <[email protected]>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='gtkwave-gtk3'
 PACKAGE_TARNAME='gtkwave-gtk3'
-PACKAGE_VERSION='3.3.126'
-PACKAGE_STRING='gtkwave-gtk3 3.3.126'
+PACKAGE_VERSION='3.3.128'
+PACKAGE_STRING='gtkwave-gtk3 3.3.128'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL=''
 
@@ -1395,7 +1395,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-gtk3 3.3.126 to adapt to many kinds of systems.
+\`configure' configures gtkwave-gtk3 3.3.128 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1461,7 +1461,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gtkwave-gtk3 3.3.126:";;
+     short | recursive ) echo "Configuration of gtkwave-gtk3 3.3.128:";;
    esac
   cat <<\_ACEOF
 
@@ -1609,7 +1609,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gtkwave-gtk3 configure 3.3.126
+gtkwave-gtk3 configure 3.3.128
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2253,7 +2253,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-gtk3 $as_me 3.3.126, which was
+It was created by gtkwave-gtk3 $as_me 3.3.128, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3120,7 +3120,7 @@
 
 # Define the identity of the package.
  PACKAGE='gtkwave-gtk3'
- VERSION='3.3.126'
+ VERSION='3.3.128'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -11568,7 +11568,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by gtkwave-gtk3 $as_me 3.3.126, which was
+This file was extended by gtkwave-gtk3 $as_me 3.3.128, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -11634,7 +11634,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-gtk3 config.status 3.3.126
+gtkwave-gtk3 config.status 3.3.128
 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-gtk3-3.3.126/configure.ac 
new/gtkwave-gtk3-3.3.128/configure.ac
--- old/gtkwave-gtk3-3.3.126/configure.ac       2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/configure.ac       2026-07-21 04:27:37.000000000 
+0200
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT(gtkwave-gtk3, 3.3.126, [email protected])
+AC_INIT(gtkwave-gtk3, 3.3.128, [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-gtk3-3.3.126/contrib/bundle_for_osx/Info-gtkwave.plist 
new/gtkwave-gtk3-3.3.128/contrib/bundle_for_osx/Info-gtkwave.plist
--- old/gtkwave-gtk3-3.3.126/contrib/bundle_for_osx/Info-gtkwave.plist  
2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/contrib/bundle_for_osx/Info-gtkwave.plist  
2026-07-21 04:27:37.000000000 +0200
@@ -8,7 +8,7 @@
     <key>CFBundleExecutable</key>
     <string>gtkwave</string>
     <key>CFBundleGetInfoString</key>
-    <string>3.3.126, (C) 1999-2025 Tony Bybell 
http://gtkwave.sourceforge.net</string>
+    <string>3.3.128, (C) 1999-2026 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.126</string>
+    <string>3.3.128</string>
     <key>CFBundleSignature</key>
     <string>????</string>
     <key>CFBundleVersion</key>
-    <string>3.3.126</string>
+    <string>3.3.128</string>
     <key>NSHumanReadableCopyright</key>
-    <string>Copyright 1999 - 2025 Tony Bybell, GNU General Public 
License.</string>
+    <string>Copyright 1999 - 2026 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-gtk3-3.3.126/share/appdata/io.github.gtkwave.GTKWave.metainfo.xml 
new/gtkwave-gtk3-3.3.128/share/appdata/io.github.gtkwave.GTKWave.metainfo.xml
--- 
old/gtkwave-gtk3-3.3.126/share/appdata/io.github.gtkwave.GTKWave.metainfo.xml   
    2025-12-23 20:49:10.000000000 +0100
+++ 
new/gtkwave-gtk3-3.3.128/share/appdata/io.github.gtkwave.GTKWave.metainfo.xml   
    2026-07-21 04:27:37.000000000 +0200
@@ -34,6 +34,36 @@
   <content_rating type="oars-1.0" />
 
   <releases>
+    <release version="3.3.128" date="2026-06-18">
+      <description>
+        <p>
+       Changes in 3.3.128:
+        </p>
+       <ul>
+            <li>Hurd compile fix.</li>
+            <li>Update lz4 to 1.10.0.</li>
+        </ul>
+      </description>
+    </release>
+
+    <release version="3.3.127" date="2026-03-31">
+      <description>
+        <p>
+       Changes in 3.3.127:
+        </p>
+       <ul>
+            <li>Fix for fixed point shift that does not disable it on the 
specify value change menu option.</li>
+            <li>Changed ps2pdf to pstopdf on Mac as ps removed by Sonoma.</li>
+            <li>Warnings fix in vcd2fst for missing string.h include.</li>
+            <li>Added FST_ST_SV_ARRAY (FST) and "sv_array" (VCD) for arrays 
(gtkwave/libfst#17).</li>
+            <li>Wrote replacement for gdk_pixbuf_new_from_xpm_data.</li>
+            <li>Update FSDB to handle FST_ST_SV_ARRAY (VCS emits this), 
FSDB_ST_SV_INTERFACEPORT_REF, and FSDB_VT_STRING.</li>
+            <li>Added "SV_ST_ARRAY" to exclude file parsing on init.</li>
+            <li>Fix use after free of GLOBALS->entrybox_text in 
regexp_highlight_generic().</li>
+        </ul>
+      </description>
+    </release>
+
     <release version="3.3.126" date="2025-12-18">
       <description>
         <p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/extload.c 
new/gtkwave-gtk3-3.3.128/src/extload.c
--- old/gtkwave-gtk3-3.3.126/src/extload.c      2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/extload.c      2026-07-21 04:27:37.000000000 
+0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Tony Bybell 2009-2017.
+ * Copyright (c) Tony Bybell 2009-2026.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -358,6 +358,14 @@
                                GLOBALS->extload_idcodes[i] = d2;
                                if(GLOBALS->extload_inv_idcodes[d2] == 0) 
GLOBALS->extload_inv_idcodes[d2] = i+1; /* root alias */
 
+                               if(!strcmp("vcd_string", typ))
+                                       {
+                                       GLOBALS->mvlfacs_vzt_c_3[i].flags = 
VZT_RD_SYM_F_DOUBLE;
+                                       GLOBALS->extload_node_block[i].msi=0;
+                                       GLOBALS->extload_node_block[i].lsi=0;
+                                       GLOBALS->mvlfacs_vzt_c_3[i].len=2;
+                                       }
+                               else
                                if(!strcmp("vcd_real", typ))
                                        {
                                        GLOBALS->mvlfacs_vzt_c_3[i].flags = 
VZT_RD_SYM_F_DOUBLE;
@@ -1047,6 +1055,14 @@
                                GLOBALS->extload_idcodes[i] = d2;
                                if(GLOBALS->extload_inv_idcodes[d2] == 0) 
GLOBALS->extload_inv_idcodes[d2] = i+1; /* root alias */
 
+                               if(fh->u.var.typ == FST_VT_GEN_STRING)
+                                       {
+                                       GLOBALS->mvlfacs_vzt_c_3[i].flags = 
VZT_RD_SYM_F_STRING;
+                                       GLOBALS->extload_node_block[i].msi=0;
+                                       GLOBALS->extload_node_block[i].lsi=0;
+                                       GLOBALS->mvlfacs_vzt_c_3[i].len=2;
+                                       }
+                               else
                                if(fh->u.var.typ == FST_VT_VCD_REAL)
                                        {
                                        GLOBALS->mvlfacs_vzt_c_3[i].flags = 
VZT_RD_SYM_F_DOUBLE;
@@ -1222,6 +1238,7 @@
                                case FST_ST_VHDL_FOR_GENERATE: ttype = 
TREE_VHDL_ST_GENFOR; break;
                                case FST_ST_VHDL_PROCEDURE: ttype = 
TREE_VHDL_ST_PROCEDURE; break;
                                case FST_ST_VHDL_PROCESS: ttype = 
TREE_VHDL_ST_PROCESS; break;
+                               case FST_ST_SV_ARRAY: ttype = TREE_SV_ST_ARRAY; 
break;
                                default: ttype = TREE_UNKNOWN; break;
                                }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/fsdb_wrapper_api.cc 
new/gtkwave-gtk3-3.3.128/src/fsdb_wrapper_api.cc
--- old/gtkwave-gtk3-3.3.126/src/fsdb_wrapper_api.cc    2025-12-23 
20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/fsdb_wrapper_api.cc    2026-07-21 
04:27:37.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Tony Bybell 2013-2017.
+ * Copyright (c) Tony Bybell 2013-2026.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -256,7 +256,7 @@
 static byte_T buffer[FSDB_MAX_BIT_SIZE+1];
 uint_T i;
 fsdbVarType   var_type; 
-    
+
 switch (vc_trvs_hdl->ffrGetBytesPerBit()) 
        {
        case FSDB_BYTES_PER_BIT_1B:
@@ -338,6 +338,11 @@
                        case FSDB_VT_VHDL_MEMORY_DEPTH:
                                buffer[0] = 0;
                                break;
+
+                       case FSDB_VT_STRING:
+                               vc_trvs_hdl->ffrGetVC(&vc_ptr);
+                               strcpy((char *)buffer, (char *)vc_ptr);
+                               break;
                       
                        default:    
                                vc_trvs_hdl->ffrGetVC(&vc_ptr);
@@ -473,6 +478,7 @@
                break;
 
        case FSDB_ST_SV_INTERFACE:
+       case FSDB_ST_SV_INTERFACEPORT_REF:
                type = (str_T) "sv_interface"; 
                break;
 
@@ -715,6 +721,11 @@
                typelen = 6;
                break;
 
+       case FSDB_VT_STRING:
+               type = (str_T) "vcd_string"; 
+               typelen = 10;
+               break;
+
        default:
                type = (str_T) "vcd_wire";
                typelen = 8;
@@ -937,6 +948,7 @@
                break;
 
        case FSDB_ST_SV_INTERFACE:
+       case FSDB_ST_SV_INTERFACEPORT_REF:
                typ = FST_ST_VCD_INTERFACE; 
                break;
 
@@ -1117,6 +1129,7 @@
                break;
 
        case FSDB_VT_STREAM: /* these hold transactions: not yet supported */
+       case FSDB_VT_STRING: /* this needs actual work */
                typ = FST_VT_GEN_STRING;
                break;
 
@@ -1173,6 +1186,16 @@
 __DumpArray2(fsdbTreeCBDataArrayBegin* arr, void (*cb)(void *))
 {
 /* printf("NAME: %s SIZE: %d is_partial_dumped: %d\n", arr->name, 
(int)arr->size, (int)arr->is_partial_dumped); */
+struct fstHier fh;
+
+fh.htyp = FST_HT_SCOPE;
+fh.u.scope.typ = FST_ST_SV_ARRAY;
+fh.u.scope.name = arr->name;
+fh.u.scope.name_length = strlen(fh.u.scope.name);
+fh.u.scope.component = NULL;
+fh.u.scope.component_length = 0;
+
+cb(&fh);
 }
 
 
@@ -1183,10 +1206,6 @@
 void (*cb)(void *) = (void (*)(void *))client_data;
 struct fstHier fh;
 
-
-
-char bf[16];
-
 switch (cb_type) 
        {
        case FSDB_TREE_CBT_BEGIN_TREE:
@@ -1203,6 +1222,7 @@
 
        case FSDB_TREE_CBT_UPSCOPE:
        case FSDB_TREE_CBT_STRUCT_END:
+       case FSDB_TREE_CBT_ARRAY_END:
                fh.htyp = FST_HT_UPSCOPE;
                cb(&fh);
                break;
@@ -1216,12 +1236,9 @@
                __DumpStruct2((fsdbTreeCBDataStructBegin*)tree_cb_data, cb);
                break;
 
-       /* not yet supported */
        case FSDB_TREE_CBT_ARRAY_BEGIN:
                __DumpArray2((fsdbTreeCBDataArrayBegin*)tree_cb_data, cb);
                break;
-       case FSDB_TREE_CBT_ARRAY_END:
-               break;
 
        case FSDB_TREE_CBT_FILE_TYPE:
        case FSDB_TREE_CBT_SIMULATOR_VERSION:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/fst.c 
new/gtkwave-gtk3-3.3.128/src/fst.c
--- old/gtkwave-gtk3-3.3.126/src/fst.c  2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/fst.c  2026-07-21 04:27:37.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Tony Bybell 2009-2025.
+ * Copyright (c) Tony Bybell 2009-2026.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -194,6 +194,8 @@
                                case FST_ST_VHDL_GENERATE:      ttype = 
TREE_VHDL_ST_GENERATE;     break;
                                case FST_ST_VHDL_PACKAGE:       ttype = 
TREE_VHDL_ST_PACKAGE;      break;
 
+                                case FST_ST_SV_ARRAY:           ttype = 
TREE_SV_ST_ARRAY;      break;
+
                                default:                        ttype = 
TREE_UNKNOWN; break;
                                }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/globals.c 
new/gtkwave-gtk3-3.3.128/src/globals.c
--- old/gtkwave-gtk3-3.3.126/src/globals.c      2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/globals.c      2026-07-21 04:27:37.000000000 
+0200
@@ -679,6 +679,7 @@
 NULL, /* hiericon_function_pixbuf */
 NULL, /* hiericon_begin_pixbuf */
 NULL, /* hiericon_fork_pixbuf */
+NULL, /* hiericon_sv_array_pixbuf */
 NULL, /* hiericon_interface_pixbuf */
 NULL, /* hiericon_svpackage_pixbuf */
 NULL, /* hiericon_program_pixbuf */
@@ -2989,6 +2990,7 @@
  a->hiericon_function_pixbuf = b->hiericon_function_pixbuf;
  a->hiericon_begin_pixbuf = b->hiericon_begin_pixbuf;
  a->hiericon_fork_pixbuf = b->hiericon_fork_pixbuf;
+ a->hiericon_sv_array_pixbuf = b->hiericon_sv_array_pixbuf;
  a->hiericon_interface_pixbuf = b->hiericon_interface_pixbuf;
  a->hiericon_svpackage_pixbuf = b->hiericon_svpackage_pixbuf;
  a->hiericon_program_pixbuf = b->hiericon_program_pixbuf;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/globals.h 
new/gtkwave-gtk3-3.3.128/src/globals.h
--- old/gtkwave-gtk3-3.3.126/src/globals.h      2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/globals.h      2026-07-21 04:27:37.000000000 
+0200
@@ -708,6 +708,7 @@
 GdkPixbuf *hiericon_function_pixbuf; /* from pixmaps.c */
 GdkPixbuf *hiericon_begin_pixbuf; /* from pixmaps.c */
 GdkPixbuf *hiericon_fork_pixbuf; /* from pixmaps.c */
+GdkPixbuf *hiericon_sv_array_pixbuf; /* from pixmaps.c */
 GdkPixbuf *hiericon_interface_pixbuf;
 GdkPixbuf *hiericon_svpackage_pixbuf;
 GdkPixbuf *hiericon_program_pixbuf;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/helpers/fst/fstapi.c 
new/gtkwave-gtk3-3.3.128/src/helpers/fst/fstapi.c
--- old/gtkwave-gtk3-3.3.126/src/helpers/fst/fstapi.c   2025-12-23 
20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/helpers/fst/fstapi.c   2026-07-21 
04:27:37.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2023 Tony Bybell.
+ * Copyright (c) 2009-2026 Tony Bybell.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -3203,7 +3203,8 @@
                                  "vhdl_for_generate",
                                  "vhdl_if_generate",
                                  "vhdl_generate",
-                                 "vhdl_package"};
+                                 "vhdl_package",
+                                 "sv_array"};
 
 static const char *attrtypes[] = {"misc", "array", "enum", "class"};
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/helpers/fst/fstapi.h 
new/gtkwave-gtk3-3.3.128/src/helpers/fst/fstapi.h
--- old/gtkwave-gtk3-3.3.126/src/helpers/fst/fstapi.h   2025-12-23 
20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/helpers/fst/fstapi.h   2026-07-21 
04:27:37.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2018 Tony Bybell.
+ * Copyright (c) 2009-2026 Tony Bybell.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -108,7 +108,8 @@
     FST_ST_VHDL_GENERATE = 20,
     FST_ST_VHDL_PACKAGE = 21,
 
-    FST_ST_MAX = 21,
+    FST_ST_SV_ARRAY = 22,
+    FST_ST_MAX = 22,
 
     FST_ST_GEN_ATTRBEGIN = 252,
     FST_ST_GEN_ATTREND = 253,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/helpers/fst/lz4.c 
new/gtkwave-gtk3-3.3.128/src/helpers/fst/lz4.c
--- old/gtkwave-gtk3-3.3.126/src/helpers/fst/lz4.c      2025-12-23 
20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/helpers/fst/lz4.c      2026-07-21 
04:27:37.000000000 +0200
@@ -124,14 +124,17 @@
 #  include <intrin.h>               /* only present in VS2005+ */
 #  pragma warning(disable : 4127)   /* disable: C4127: conditional expression 
is constant */
 #  pragma warning(disable : 6237)   /* disable: C6237: conditional expression 
is always 0 */
+#  pragma warning(disable : 6239)   /* disable: C6239: (<non-zero constant> && 
<expression>) always evaluates to the result of <expression> */
+#  pragma warning(disable : 6240)   /* disable: C6240: (<expression> && 
<non-zero constant>) always evaluates to the result of <expression> */
+#  pragma warning(disable : 6326)   /* disable: C6326: Potential comparison of 
a constant with another constant */
 #endif  /* _MSC_VER */
 
 #ifndef LZ4_FORCE_INLINE
-#  ifdef _MSC_VER    /* Visual Studio */
+#  if defined (_MSC_VER) && !defined (__clang__)    /* MSVC */
 #    define LZ4_FORCE_INLINE static __forceinline
 #  else
 #    if defined (__cplusplus) || defined (__STDC_VERSION__) && 
__STDC_VERSION__ >= 199901L   /* C99 */
-#      ifdef __GNUC__
+#      if defined (__GNUC__) || defined (__clang__)
 #        define LZ4_FORCE_INLINE static inline __attribute__((always_inline))
 #      else
 #        define LZ4_FORCE_INLINE static inline
@@ -430,7 +433,7 @@
         return LZ4_read16(memPtr);
     } else {
         const BYTE* p = (const BYTE*)memPtr;
-        return (U16)((U16)p[0] + (p[1]<<8));
+        return (U16)((U16)p[0] | (p[1]<<8));
     }
 }
 
@@ -441,7 +444,7 @@
         return LZ4_read32(memPtr);
     } else {
         const BYTE* p = (const BYTE*)memPtr;
-        return (U32)p[0] + (p[1]<<8) + (p[2]<<16) + (p[3]<<24);
+        return (U32)p[0] | (p[1]<<8) | (p[2]<<16) | (p[3]<<24);
     }
 }
 #endif
@@ -527,7 +530,7 @@
 
 /* LZ4_memcpy_using_offset()  presumes :
  * - dstEnd >= dstPtr + MINMATCH
- * - there is at least 8 bytes available to write after dstEnd */
+ * - there is at least 12 bytes available to write after dstEnd */
 LZ4_FORCE_INLINE void
 LZ4_memcpy_using_offset(BYTE* dstPtr, const BYTE* srcPtr, BYTE* dstEnd, const 
size_t offset)
 {
@@ -1118,7 +1121,7 @@
                 goto _last_literals;
             }
             if (litLength >= RUN_MASK) {
-                int len = (int)(litLength - RUN_MASK);
+                unsigned len = litLength - RUN_MASK;
                 *token = (RUN_MASK<<ML_BITS);
                 for(; len >= 255 ; len-=255) *op++ = 255;
                 *op++ = (BYTE)len;
@@ -1579,8 +1582,11 @@
 #endif
 
 
+typedef enum { _ld_fast, _ld_slow } LoadDict_mode_e;
 #define HASH_UNIT sizeof(reg_t)
-int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize)
+int LZ4_loadDict_internal(LZ4_stream_t* LZ4_dict,
+                    const char* dictionary, int dictSize,
+                    LoadDict_mode_e _ld)
 {
     LZ4_stream_t_internal* const dict = &LZ4_dict->internal_donotuse;
     const tableType_t tableType = byU32;
@@ -1616,13 +1622,39 @@
 
     while (p <= dictEnd-HASH_UNIT) {
         U32 const h = LZ4_hashPosition(p, tableType);
+        /* Note: overwriting => favors positions end of dictionary */
         LZ4_putIndexOnHash(idx32, h, dict->hashTable, tableType);
         p+=3; idx32+=3;
     }
 
+    if (_ld == _ld_slow) {
+        /* Fill hash table with additional references, to improve compression 
capability */
+        p = dict->dictionary;
+        idx32 = dict->currentOffset - dict->dictSize;
+        while (p <= dictEnd-HASH_UNIT) {
+            U32 const h = LZ4_hashPosition(p, tableType);
+            U32 const limit = dict->currentOffset - 64 KB;
+            if (LZ4_getIndexOnHash(h, dict->hashTable, tableType) <= limit) {
+                /* Note: not overwriting => favors positions beginning of 
dictionary */
+                LZ4_putIndexOnHash(idx32, h, dict->hashTable, tableType);
+            }
+            p++; idx32++;
+        }
+    }
+
     return (int)dict->dictSize;
 }
 
+int LZ4_loadDict(LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize)
+{
+    return LZ4_loadDict_internal(LZ4_dict, dictionary, dictSize, _ld_fast);
+}
+
+int LZ4_loadDictSlow(LZ4_stream_t* LZ4_dict, const char* dictionary, int 
dictSize)
+{
+    return LZ4_loadDict_internal(LZ4_dict, dictionary, dictSize, _ld_slow);
+}
+
 void LZ4_attach_dictionary(LZ4_stream_t* workingStream, const LZ4_stream_t* 
dictionaryStream)
 {
     const LZ4_stream_t_internal* dictCtx = (dictionaryStream == NULL) ? NULL :
@@ -2042,7 +2074,7 @@
      * note : fast loop may show a regression for some client arm chips. */
 #if LZ4_FAST_DEC_LOOP
         if ((oend - op) < FASTLOOP_SAFE_DISTANCE) {
-            DEBUGLOG(6, "skip fast decode loop");
+            DEBUGLOG(6, "move to safe decode loop");
             goto safe_decode;
         }
 
@@ -2054,6 +2086,7 @@
             assert(ip < iend);
             token = *ip++;
             length = token >> ML_BITS;  /* literal length */
+            DEBUGLOG(7, "blockPos%6u: litLength token = %u", 
(unsigned)(op-(BYTE*)dst), (unsigned)length);
 
             /* decode literal length */
             if (length == RUN_MASK) {
@@ -2083,21 +2116,23 @@
 
             /* get offset */
             offset = LZ4_readLE16(ip); ip+=2;
-            DEBUGLOG(6, " offset = %zu", offset);
+            DEBUGLOG(6, "blockPos%6u: offset = %u", (unsigned)(op-(BYTE*)dst), 
(unsigned)offset);
             match = op - offset;
             assert(match <= op);  /* overflow check */
 
             /* get matchlength */
             length = token & ML_MASK;
+            DEBUGLOG(7, "  match length token = %u (len==%u)", 
(unsigned)length, (unsigned)length+MINMATCH);
 
             if (length == ML_MASK) {
                 size_t const addl = read_variable_length(&ip, iend - 
LASTLITERALS + 1, 0);
                 if (addl == rvl_error) {
-                    DEBUGLOG(6, "error reading long match length");
+                    DEBUGLOG(5, "error reading long match length");
                     goto _output_error;
                 }
                 length += addl;
                 length += MINMATCH;
+                DEBUGLOG(7, "  long match length == %u", (unsigned)length);
                 if (unlikely((uptrval)(op)+length<(uptrval)op)) { goto 
_output_error; } /* overflow detection */
                 if (op + length >= oend - FASTLOOP_SAFE_DISTANCE) {
                     goto safe_match_copy;
@@ -2105,6 +2140,7 @@
             } else {
                 length += MINMATCH;
                 if (op + length >= oend - FASTLOOP_SAFE_DISTANCE) {
+                    DEBUGLOG(7, "moving to safe_match_copy (ml==%u)", 
(unsigned)length);
                     goto safe_match_copy;
                 }
 
@@ -2123,7 +2159,7 @@
             }   }   }
 
             if ( checkOffset && (unlikely(match + dictSize < lowPrefix)) ) {
-                DEBUGLOG(6, "Error : pos=%zi, offset=%zi => outside buffers", 
op-lowPrefix, op-match);
+                DEBUGLOG(5, "Error : pos=%zi, offset=%zi => outside buffers", 
op-lowPrefix, op-match);
                 goto _output_error;
             }
             /* match starting within external dictionary */
@@ -2180,6 +2216,7 @@
             assert(ip < iend);
             token = *ip++;
             length = token >> ML_BITS;  /* literal length */
+            DEBUGLOG(7, "blockPos%6u: litLength token = %u", 
(unsigned)(op-(BYTE*)dst), (unsigned)length);
 
             /* A two-stage shortcut for the most common case:
              * 1) If the literal length is 0..14, and there is enough space,
@@ -2200,6 +2237,7 @@
                 /* The second stage: prepare for match copying, decode full 
info.
                  * If it doesn't work out, the info won't be wasted. */
                 length = token & ML_MASK; /* match length */
+                DEBUGLOG(7, "blockPos%6u: matchLength token = %u (len=%u)", 
(unsigned)(op-(BYTE*)dst), (unsigned)length, (unsigned)length + 4);
                 offset = LZ4_readLE16(ip); ip += 2;
                 match = op - offset;
                 assert(match <= op); /* check overflow */
@@ -2272,9 +2310,10 @@
                       * so check that we exactly consume the input and don't 
overrun the output buffer.
                       */
                     if ((ip+length != iend) || (cpy > oend)) {
-                        DEBUGLOG(6, "should have been last run of literals")
-                        DEBUGLOG(6, "ip(%p) + length(%i) = %p != iend (%p)", 
ip, (int)length, ip+length, iend);
-                        DEBUGLOG(6, "or cpy(%p) > oend(%p)", cpy, oend);
+                        DEBUGLOG(5, "should have been last run of literals")
+                        DEBUGLOG(5, "ip(%p) + length(%i) = %p != iend (%p)", 
ip, (int)length, ip+length, iend);
+                        DEBUGLOG(5, "or cpy(%p) > (oend-MFLIMIT)(%p)", cpy, 
oend-MFLIMIT);
+                        DEBUGLOG(5, "after writing %u bytes / %i bytes 
available", (unsigned)(op-(BYTE*)dst), outputSize);
                         goto _output_error;
                     }
                 }
@@ -2300,6 +2339,7 @@
 
             /* get matchlength */
             length = token & ML_MASK;
+            DEBUGLOG(7, "blockPos%6u: matchLength token = %u", 
(unsigned)(op-(BYTE*)dst), (unsigned)length);
 
     _copy_match:
             if (length == ML_MASK) {
@@ -2389,7 +2429,7 @@
                 while (op < cpy) { *op++ = *match++; }
             } else {
                 LZ4_memcpy(op, match, 8);
-                if (length > 16)  { LZ4_wildCopy8(op+8, match+8, cpy); }
+                if (length > 16) { LZ4_wildCopy8(op+8, match+8, cpy); }
             }
             op = cpy;   /* wildcopy correction */
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/helpers/fst/lz4.h 
new/gtkwave-gtk3-3.3.128/src/helpers/fst/lz4.h
--- old/gtkwave-gtk3-3.3.126/src/helpers/fst/lz4.h      2025-12-23 
20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/helpers/fst/lz4.h      2026-07-21 
04:27:37.000000000 +0200
@@ -129,8 +129,8 @@
 
 /*------   Version   ------*/
 #define LZ4_VERSION_MAJOR    1    /* for breaking interface changes  */
-#define LZ4_VERSION_MINOR    9    /* for new (non-breaking) interface 
capabilities */
-#define LZ4_VERSION_RELEASE  5    /* for tweaks, bug-fixes, or development */
+#define LZ4_VERSION_MINOR   10    /* for new (non-breaking) interface 
capabilities */
+#define LZ4_VERSION_RELEASE  0    /* for tweaks, bug-fixes, or development */
 
 #define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR 
*100 + LZ4_VERSION_RELEASE)
 
@@ -148,6 +148,7 @@
 **************************************/
 /*!
  * LZ4_MEMORY_USAGE :
+ * Can be selected at compile time, by setting LZ4_MEMORY_USAGE.
  * Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 
-> 64KB; 20 -> 1MB)
  * Increasing memory usage improves compression ratio, generally at the cost 
of speed.
  * Reduced memory usage may improve speed at the cost of ratio, thanks to 
better cache locality.
@@ -157,6 +158,7 @@
 # define LZ4_MEMORY_USAGE LZ4_MEMORY_USAGE_DEFAULT
 #endif
 
+/* These are absolute limits, they should not be changed by users */
 #define LZ4_MEMORY_USAGE_MIN 10
 #define LZ4_MEMORY_USAGE_DEFAULT 14
 #define LZ4_MEMORY_USAGE_MAX 20
@@ -368,6 +370,51 @@
  */
 LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, 
int dictSize);
 
+/*! LZ4_loadDictSlow() : v1.10.0+
+ *  Same as LZ4_loadDict(),
+ *  but uses a bit more cpu to reference the dictionary content more 
thoroughly.
+ *  This is expected to slightly improve compression ratio.
+ *  The extra-cpu cost is likely worth it if the dictionary is re-used across 
multiple sessions.
+ * @return : loaded dictionary size, in bytes (note: only the last 64 KB are 
loaded)
+ */
+LZ4LIB_API int LZ4_loadDictSlow(LZ4_stream_t* streamPtr, const char* 
dictionary, int dictSize);
+
+/*! LZ4_attach_dictionary() : stable since v1.10.0
+ *
+ *  This allows efficient re-use of a static dictionary multiple times.
+ *
+ *  Rather than re-loading the dictionary buffer into a working context before
+ *  each compression, or copying a pre-loaded dictionary's LZ4_stream_t into a
+ *  working LZ4_stream_t, this function introduces a no-copy setup mechanism,
+ *  in which the working stream references @dictionaryStream in-place.
+ *
+ *  Several assumptions are made about the state of @dictionaryStream.
+ *  Currently, only states which have been prepared by LZ4_loadDict() or
+ *  LZ4_loadDictSlow() should be expected to work.
+ *
+ *  Alternatively, the provided @dictionaryStream may be NULL,
+ *  in which case any existing dictionary stream is unset.
+ *
+ *  If a dictionary is provided, it replaces any pre-existing stream history.
+ *  The dictionary contents are the only history that can be referenced and
+ *  logically immediately precede the data compressed in the first subsequent
+ *  compression call.
+ *
+ *  The dictionary will only remain attached to the working stream through the
+ *  first compression call, at the end of which it is cleared.
+ * @dictionaryStream stream (and source buffer) must remain in-place / 
accessible / unchanged
+ *  through the completion of the compression session.
+ *
+ *  Note: there is no equivalent LZ4_attach_*() method on the decompression 
side
+ *  because there is no initialization cost, hence no need to share the cost 
across multiple sessions.
+ *  To decompress LZ4 blocks using dictionary, attached or not,
+ *  just employ the regular LZ4_setStreamDecode() for streaming,
+ *  or the stateless LZ4_decompress_safe_usingDict() for one-shot 
decompression.
+ */
+LZ4LIB_API void
+LZ4_attach_dictionary(LZ4_stream_t* workingStream,
+                const LZ4_stream_t* dictionaryStream);
+
 /*! LZ4_compress_fast_continue() :
  *  Compress 'src' content using data from previously compressed blocks, for 
better compression ratio.
  * 'dst' buffer must be already allocated.
@@ -563,43 +610,12 @@
  */
 LZ4LIB_STATIC_API int LZ4_compress_fast_extState_fastReset (void* state, const 
char* src, char* dst, int srcSize, int dstCapacity, int acceleration);
 
-/*! LZ4_compress_destSize_extState() :
+/*! LZ4_compress_destSize_extState() : introduced in v1.10.0
  *  Same as LZ4_compress_destSize(), but using an externally allocated state.
  *  Also: exposes @acceleration
  */
 int LZ4_compress_destSize_extState(void* state, const char* src, char* dst, 
int* srcSizePtr, int targetDstSize, int acceleration);
 
-/*! LZ4_attach_dictionary() :
- *  This is an experimental API that allows
- *  efficient use of a static dictionary many times.
- *
- *  Rather than re-loading the dictionary buffer into a working context before
- *  each compression, or copying a pre-loaded dictionary's LZ4_stream_t into a
- *  working LZ4_stream_t, this function introduces a no-copy setup mechanism,
- *  in which the working stream references the dictionary stream in-place.
- *
- *  Several assumptions are made about the state of the dictionary stream.
- *  Currently, only streams which have been prepared by LZ4_loadDict() should
- *  be expected to work.
- *
- *  Alternatively, the provided dictionaryStream may be NULL,
- *  in which case any existing dictionary stream is unset.
- *
- *  If a dictionary is provided, it replaces any pre-existing stream history.
- *  The dictionary contents are the only history that can be referenced and
- *  logically immediately precede the data compressed in the first subsequent
- *  compression call.
- *
- *  The dictionary will only remain attached to the working stream through the
- *  first compression call, at the end of which it is cleared. The dictionary
- *  stream (and source buffer) must remain in-place / accessible / unchanged
- *  through the completion of the first compression call on the stream.
- */
-LZ4LIB_STATIC_API void
-LZ4_attach_dictionary(LZ4_stream_t* workingStream,
-                const LZ4_stream_t* dictionaryStream);
-
-
 /*! In-place compression and decompression
  *
  * It's possible to have input and output sharing the same buffer,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/helpers/vcd2fst.c 
new/gtkwave-gtk3-3.3.128/src/helpers/vcd2fst.c
--- old/gtkwave-gtk3-3.3.126/src/helpers/vcd2fst.c      2025-12-23 
20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/helpers/vcd2fst.c      2026-07-21 
04:27:37.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2014 Tony Bybell.
+ * Copyright (c) 2009-2026 Tony Bybell.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -21,6 +21,7 @@
  */
 
 #include <config.h>
+#include <string.h>
 
 #if HAVE_GETOPT_H
 #include <getopt.h>
@@ -960,6 +961,11 @@
                                        {
                                        scopetype = FST_ST_VCD_STRUCT;
                                        }
+                                else
+                               if(!strcmp(st, "sv_array"))
+                                       {
+                                       scopetype = FST_ST_SV_ARRAY;
+                                       }
                                break;
 
                        case 'u':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/main.c 
new/gtkwave-gtk3-3.3.128/src/main.c
--- old/gtkwave-gtk3-3.3.126/src/main.c 2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/main.c 2026-07-21 04:27:37.000000000 +0200
@@ -1605,6 +1605,7 @@
 
 fprintf(stderr, "\n%s\n\n",WAVE_VERSION_INFO);
 
+#if 0
 if(!mainwindow_already_built) {
   gboolean has_xpm_loader = FALSE;
 
@@ -1626,6 +1627,7 @@
       fprintf(stderr, "GTKWAVE | GdkPixbuf loader for XPM images is not 
installed.\n");
   }
 }
+#endif
 
 if(!old_g) /* copy all variables earlier when old_g is set */
        {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/menu.c 
new/gtkwave-gtk3-3.3.128/src/menu.c
--- old/gtkwave-gtk3-3.3.126/src/menu.c 2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/menu.c 2026-07-21 04:27:37.000000000 +0200
@@ -4540,7 +4540,7 @@
 
        strcpy(GLOBALS->regexp_string_menu_c_1, GLOBALS->entrybox_text);
        wave_regex_compile(GLOBALS->regexp_string_menu_c_1, WAVE_REGEX_SEARCH);
-       free_2(GLOBALS->entrybox_text);
+       free_2(GLOBALS->entrybox_text); GLOBALS->entrybox_text = NULL;
        t=GLOBALS->traces.first;
        while(t)
                {
@@ -6685,7 +6685,8 @@
 
 entrybox("Fixed Point Shift 
Specify",300,"",NULL,128,G_CALLBACK(menu_dataformat_fpshift_specify_cleanup));
 
-dataformat( ~(TR_FPDECSHIFT), 0 );
+/* not necessary as menu_dataformat_fpshift_specify_cleanup() has 
dataformat-like code in it that also handles the error case which this doesn't 
*/
+/* dataformat( ~(TR_FPDECSHIFT), TR_FPDECSHIFT ); */
 }
 
 void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/pixmaps.c 
new/gtkwave-gtk3-3.3.128/src/pixmaps.c
--- old/gtkwave-gtk3-3.3.126/src/pixmaps.c      2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/pixmaps.c      2026-07-21 04:27:37.000000000 
+0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Tony Bybell 1999-2012.
+ * Copyright (c) Tony Bybell 1999-2026.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -10,6 +10,7 @@
 #include "globals.h"
 #include <config.h>
 #include "pixmaps.h"
+#include <assert.h>
 
 /* XPM */
 static char * icon_redo[] = {
@@ -4670,6 +4671,123 @@
 };
 
 
+/* XPM */
+static char *table_multiple[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 93 2 ",
+"   c #7CBE76",
+".  c #80C17A",
+"X  c #84C37E",
+"o  c #4277BB",
+"O  c #5284C3",
+"+  c #5486C4",
+"@  c #5586C6",
+"#  c #5687C7",
+"$  c #5D8AC5",
+"%  c #598AC8",
+"&  c #5F8FCB",
+"*  c #6392CE",
+"=  c #6493CE",
+"-  c #6896D1",
+";  c #6A97D1",
+":  c #6E99D3",
+">  c #6F9BD4",
+",  c #729ED6",
+"<  c #74A0D7",
+"1  c #75A1D7",
+"2  c #7AA3DA",
+"3  c #7DA5DC",
+"4  c #7FA8DC",
+"5  c #89C682",
+"6  c #93CB8B",
+"7  c #A1D398",
+"8  c #A5D59C",
+"9  c #80A9DD",
+"0  c #87B0DA",
+"q  c #8BB3DC",
+"w  c #92B8DF",
+"e  c #84ACE0",
+"r  c #85ACE0",
+"t  c #87AEE1",
+"y  c #88AFE2",
+"u  c #8CB1E3",
+"i  c #8DB2E2",
+"p  c #8CB2E4",
+"a  c #8FB4E5",
+"s  c #92B6E5",
+"d  c #93B6E5",
+"f  c #93B7E7",
+"g  c #94B7E7",
+"h  c #96B8E7",
+"j  c #9BBFE3",
+"k  c #98BAE9",
+"l  c #99BBE9",
+"z  c #9BBDEB",
+"x  c #9CBDEB",
+"c  c #9DBEEB",
+"v  c #9EBFEC",
+"b  c #9FBFEC",
+"n  c #A4CBC6",
+"m  c #A4CBC9",
+"M  c #9EC1E5",
+"N  c #9FC0ED",
+"B  c #A2C4E1",
+"V  c #A2C3E6",
+"C  c #A6C3E9",
+"Z  c #A1C1EE",
+"A  c #A2C1EF",
+"S  c #AAC6E9",
+"D  c #ACC7E8",
+"F  c #ACC6E9",
+"G  c #A8C6EF",
+"H  c #AEC8E8",
+"J  c #AEC9EA",
+"K  c #B0C8E8",
+"L  c #B0C9E9",
+"P  c #B2CBEA",
+"I  c #B3CCEA",
+"U  c #B5CCE8",
+"Y  c #AECAF0",
+"T  c #D8E2F0",
+"R  c #DBE4F1",
+"E  c #DBE5F1",
+"W  c #DEE7F2",
+"Q  c #E5ECF7",
+"!  c #E6EDF6",
+"~  c #E9EFF8",
+"^  c #EAF0F7",
+"/  c #EBF1F7",
+"(  c #EDF2F8",
+")  c #EDF3F9",
+"_  c #EEF3FA",
+"`  c #F0F4FA",
+"'  c #F0F5FA",
+"]  c #F1F6FA",
+"[  c #F2F6FA",
+"{  c #F4F7FB",
+"}  c #F5F8FB",
+"|  c white",
+" . c None",
+/* pixels */
+" . . . . . . . . . . . . . . . .",
+" . .A N c f p y e 9 3 2  . . . .",
+" .Z { { { { { { { { { <  . . . .",
+" .v { n B M j w q 0 i 4 3 2  . .",
+" .z { Y } } } } } } { ~ { <  . .",
+" .k { b _ m V N c f p y e 9 3 2 ",
+" .g { x } G { { { { { { { { { < ",
+" .a [ l _ v { 8 7 6 5 X .   { > ",
+" .u ] h } z { | | | | | | | { ; ",
+" .t ` s ) k { C C C C C C C { = ",
+" .1 ( d ' g { C | D | | | | / & ",
+" ., : r Q a [ S F D D L K U W % ",
+" . . .1 ( u ] J | D | | | | E @ ",
+" . . ., : t ` P I D D D K H T + ",
+" . . . . .1 ( ^ ! R T T T T T $ ",
+" . . . . ., : - * # O O O O O o "
+};
+
+
 #ifdef MAC_INTEGRATION
 #define wave_gdk_pixmap_create_from_xpm_d(A,B,C,D) 
gdk_pixmap_create_from_xpm_d(A,NULL,C,D)
 #else
@@ -4685,53 +4803,54 @@
 {
 GdkPixbuf *gp;
 
-GLOBALS->redo_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar **)icon_redo);
-GLOBALS->larrow_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_larrow);
-GLOBALS->rarrow_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_rarrow);
-GLOBALS->prev_page_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)prev_page_xpm);
-GLOBALS->next_page_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)next_page_xpm);
-
-GLOBALS->zoomout_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_zoomout);
-GLOBALS->zoomin_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_zoomin);
-GLOBALS->zoomfit_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_zoomfit);
-GLOBALS->zoomundo_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_zoomundo);
-GLOBALS->zoom_larrow_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)zoom_larrow);
-GLOBALS->zoom_rarrow_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)zoom_rarrow);
+GLOBALS->redo_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_redo);
+GLOBALS->larrow_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_larrow);
+GLOBALS->rarrow_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_rarrow);
+GLOBALS->prev_page_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)prev_page_xpm);
+GLOBALS->next_page_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)next_page_xpm);
+
+GLOBALS->zoomout_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_zoomout);
+GLOBALS->zoomin_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_zoomin);
+GLOBALS->zoomfit_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_zoomfit);
+GLOBALS->zoomundo_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_zoomundo);
+GLOBALS->zoom_larrow_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)zoom_larrow);
+GLOBALS->zoom_rarrow_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)zoom_rarrow);
 
-GLOBALS->wave_info_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)wave_info);
-GLOBALS->wave_alert_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)wave_alert);
+GLOBALS->wave_info_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)wave_info);
+GLOBALS->wave_alert_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)wave_alert);
 
 /* Verilog */
-GLOBALS->hiericon_module_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)chart_organisation);
-GLOBALS->hiericon_task_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)cog);
-GLOBALS->hiericon_function_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)chart_line);
-GLOBALS->hiericon_begin_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)flag_green);
-GLOBALS->hiericon_fork_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)arrow_divide);
+GLOBALS->hiericon_module_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)chart_organisation);
+GLOBALS->hiericon_task_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)cog);
+GLOBALS->hiericon_function_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const 
gchar **)chart_line);
+GLOBALS->hiericon_begin_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)flag_green);
+GLOBALS->hiericon_fork_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)arrow_divide);
+GLOBALS->hiericon_sv_array_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const 
gchar **)table_multiple);
 
 /* SV */
-GLOBALS->hiericon_interface_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)arrow_inout);
-GLOBALS->hiericon_svpackage_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)package);
-GLOBALS->hiericon_program_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)application);
-GLOBALS->hiericon_class_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)plugin);
+GLOBALS->hiericon_interface_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const 
gchar **)arrow_inout);
+GLOBALS->hiericon_svpackage_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const 
gchar **)package);
+GLOBALS->hiericon_program_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)application);
+GLOBALS->hiericon_class_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)plugin);
 
 /* VHDL */
-GLOBALS->hiericon_design_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)database);
-GLOBALS->hiericon_block_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)brick);
-GLOBALS->hiericon_generateif_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)arrow_switch);
-GLOBALS->hiericon_generatefor_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)arrow_rotate_clockwise);
-GLOBALS->hiericon_instance_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_component);
-GLOBALS->hiericon_package_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)box);
-
-GLOBALS->hiericon_signal_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)signal_gtkwave);
-GLOBALS->hiericon_portin_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)door_in);
-GLOBALS->hiericon_portout_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)door_out);
-GLOBALS->hiericon_portinout_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)door_open);
-GLOBALS->hiericon_buffer_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_extension);
-GLOBALS->hiericon_linkage_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_link);
+GLOBALS->hiericon_design_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)database);
+GLOBALS->hiericon_block_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)brick);
+GLOBALS->hiericon_generateif_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const 
gchar **)arrow_switch);
+GLOBALS->hiericon_generatefor_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const 
gchar **)arrow_rotate_clockwise);
+GLOBALS->hiericon_instance_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const 
gchar **)icon_component);
+GLOBALS->hiericon_package_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)box);
+
+GLOBALS->hiericon_signal_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)signal_gtkwave);
+GLOBALS->hiericon_portin_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)door_in);
+GLOBALS->hiericon_portout_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)door_out);
+GLOBALS->hiericon_portinout_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const 
gchar **)door_open);
+GLOBALS->hiericon_buffer_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_extension);
+GLOBALS->hiericon_linkage_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)icon_link);
 
 /* FSDB VHDL (on top of GHW's existing) */
-GLOBALS->hiericon_record_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)cd_img);
-GLOBALS->hiericon_generate_pixbuf=gdk_pixbuf_new_from_xpm_data((const gchar 
**)arrow_redo);
+GLOBALS->hiericon_record_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)cd_img);
+GLOBALS->hiericon_generate_pixbuf=XXX_gdk_pixbuf_new_from_xpm_data((const 
gchar **)arrow_redo);
 
 /* set icon for window manager */
 gp = GLOBALS->wave_info_pixbuf;
@@ -4740,3 +4859,95 @@
 return(gp);
 #endif
 }
+
+
+/* replacement function as XPM has been removed in some distributions 
containing gdkpixbuf */
+GdkPixbuf *XXX_gdk_pixbuf_new_from_xpm_data(const gchar **src)
+{
+int row = 0;
+int width=0, height=0, ncols=0, ncolbytes=0;
+unsigned int argb = 0;
+int rc, i, x, y;
+guchar r[65536];
+guchar g[65536];
+guchar b[65536];
+guchar a[65536];
+
+memset(r, sizeof(r), 0);
+memset(g, sizeof(g), 0);
+memset(b, sizeof(b), 0);
+memset(a, sizeof(a), 0);
+
+rc = sscanf(src[row++], "%d %d %d %d", &width, &height, &ncols, &ncolbytes);
+assert(rc == 4);
+assert(ncolbytes<=2);
+
+for(i=0;i<ncols;i++)
+       {
+       int cval = (ncolbytes==1) ? ((int)src[row][0]) : 
((int)src[row][0])+256*((int)src[row][1]);
+       
+       assert(src[row][ncolbytes+1] == 'c');
+
+       if(src[row][ncolbytes+3] == '#')
+               {
+               const gchar *hex = src[row]+ncolbytes+4;
+               int slen = strlen(hex);
+               if(slen==6) /* 24-bit color specification */
+                       {
+                       argb = get_rgb_from_name(src[row]+ncolbytes+4);
+                       }
+               else
+               if(slen==12) /* chop down 48-bit color specification */
+                       {
+                       gchar hex6[7] = {hex[0],hex[1], 
+                                        hex[4],hex[5],
+                                        hex[8],hex[9], 
+                                        0};    
+                       argb = get_rgb_from_name(hex6);
+                       }
+               }
+       else
+       if((src[row][ncolbytes+3] == 'N') && (!strcmp(src[row]+ncolbytes+4, 
"one")))
+               {
+               argb = 0xFF000000;
+               }
+       else
+               {
+               argb = get_rgb_from_name(src[row]+ncolbytes+3);
+               }
+
+       b[cval] = argb & 255; argb >>= 8;
+       g[cval] = argb & 255; argb >>= 8;
+       r[cval] = argb & 255; argb >>= 8;
+       a[cval] = ~(argb & 255);
+
+       row++;
+       }
+
+GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, 
height);
+guchar *pixels = gdk_pixbuf_get_pixels (pixbuf);
+int rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+assert(gdk_pixbuf_get_n_channels(pixbuf) == 4);
+
+for(y=0;y<height;y++)
+       {
+       const char *cv = src[row++];
+       for(x=0;x<width;x++)
+               {
+               int cval = ((int)*(cv++));
+
+               if(ncolbytes==2)
+                       {
+                       cval += (((int)*(cv++)) << 8);
+                       }
+
+               guchar *p = pixels + y * rowstride + x * 4;
+               p[0] = r[cval];
+               p[1] = g[cval];
+               p[2] = b[cval];
+               p[3] = a[cval];
+               }
+       }
+
+return(pixbuf);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/pixmaps.h 
new/gtkwave-gtk3-3.3.128/src/pixmaps.h
--- old/gtkwave-gtk3-3.3.126/src/pixmaps.h      2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/pixmaps.h      2026-07-21 04:27:37.000000000 
+0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Tony Bybell 1999-2011.
+ * Copyright (c) Tony Bybell 1999-2026.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -26,7 +26,7 @@
 #define WAVE_SPLASH_Y (384)
 
 void make_splash_pixmaps(GtkWidget *window);
-
+GdkPixbuf *XXX_gdk_pixbuf_new_from_xpm_data(const gchar **src);
 
 #endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/rc.h 
new/gtkwave-gtk3-3.3.128/src/rc.h
--- old/gtkwave-gtk3-3.3.126/src/rc.h   2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/rc.h   2026-07-21 04:27:37.000000000 +0200
@@ -26,7 +26,7 @@
 
 void read_rc_file(char *override_rc);
 int insert_rc_variable(char *str);
-int get_rgb_from_name(char *str);
+int get_rgb_from_name(const char *str);
 
 int  f_accel (char *str);
 int  f_alt_hier_delimeter (char *str);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/renderopt.c 
new/gtkwave-gtk3-3.3.128/src/renderopt.c
--- old/gtkwave-gtk3-3.3.126/src/renderopt.c    2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/renderopt.c    2026-07-21 04:27:37.000000000 
+0200
@@ -153,14 +153,10 @@
                        }
                        else
                        {
-                       char *sysname = malloc_2(7 + 1 + len + 3 + 1 + len + 1);
+                       char *sysname = malloc_2(6 + 1 + len + 3 + 1 + len + 1);
                        int rc;
 
-#ifdef MAC_INTEGRATION
-                       sprintf(sysname, "pstopdf"      /* 7 */
-#else
                        sprintf(sysname, "ps2pdf"       /* 6 */
-#endif
                                         " "            /* 1 */
                                         "%s"           /* len + 3 */
                                         " "            /* 1 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/rgb.c 
new/gtkwave-gtk3-3.3.128/src/rgb.c
--- old/gtkwave-gtk3-3.3.126/src/rgb.c  2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/rgb.c  2026-07-21 04:27:37.000000000 +0200
@@ -796,7 +796,7 @@
 return((int)strcasecmp(key, color->name));
 }
 
-int get_rgb_from_name(char *str)
+int get_rgb_from_name(const char *str)
 {
 struct wave_rgb_color *match;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/savefile.c 
new/gtkwave-gtk3-3.3.128/src/savefile.c
--- old/gtkwave-gtk3-3.3.126/src/savefile.c     2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/savefile.c     2026-07-21 04:27:37.000000000 
+0200
@@ -16,7 +16,7 @@
 #include <sys/stat.h>
 #endif
 
-#ifdef __linux__
+#if defined( __linux__ ) || defined(__gnu_hurd__)
 #ifndef _XOPEN_SOURCE
 char *strptime(const char *s, const char *format, struct tm *tm);
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/splash.c 
new/gtkwave-gtk3-3.3.128/src/splash.c
--- old/gtkwave-gtk3-3.3.126/src/splash.c       2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/splash.c       2026-07-21 04:27:37.000000000 
+0200
@@ -667,7 +667,7 @@
 {
 (void) window;
 
-GLOBALS->wave_splash_pixbuf = gdk_pixbuf_new_from_xpm_data((const gchar 
**)wave_splash_xpm);
+GLOBALS->wave_splash_pixbuf = XXX_gdk_pixbuf_new_from_xpm_data((const gchar 
**)wave_splash_xpm);
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/tree.c 
new/gtkwave-gtk3-3.3.128/src/tree.c
--- old/gtkwave-gtk3-3.3.126/src/tree.c 2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/tree.c 2026-07-21 04:27:37.000000000 +0200
@@ -860,6 +860,8 @@
                        case TREE_VHDL_ST_RECORD:       pxb = 
GLOBALS->hiericon_record_pixbuf; break;
                        case TREE_VHDL_ST_GENERATE:     pxb = 
GLOBALS->hiericon_generate_pixbuf; break;
 
+                        case TREE_SV_ST_ARRAY:          pxb = 
GLOBALS->hiericon_sv_array_pixbuf; break; /* new VCD add for artificial 
hierarchy */
+
                        default:                        pxb = NULL; break;
                        }
 
@@ -1073,6 +1075,8 @@
                                                        else if(!strcmp(p, 
"VHDL_ST_RECORD")) { exclhier |= exclone << TREE_VHDL_ST_RECORD; }
                                                        else if(!strcmp(p, 
"VHDL_ST_PROCESS")) { exclhier |= exclone << TREE_VHDL_ST_PROCESS; }
                                                        else if(!strcmp(p, 
"VHDL_ST_GENERATE")) { exclhier |= exclone << TREE_VHDL_ST_GENERATE; }
+
+                                                       else if(!strcmp(p, 
"SV_ST_ARRAY")) { exclhier |= exclone << TREE_SV_ST_ARRAY; }
                                                        break;
 
                                                case SST_EXCL_COMP:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/tree.h 
new/gtkwave-gtk3-3.3.128/src/tree.h
--- old/gtkwave-gtk3-3.3.126/src/tree.h 2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/tree.h 2026-07-21 04:27:37.000000000 +0200
@@ -91,7 +91,10 @@
    TREE_VHDL_ST_PROCEDURE,
    TREE_VHDL_ST_RECORD,
    TREE_VHDL_ST_PROCESS,
-   TREE_VHDL_ST_GENERATE
+   TREE_VHDL_ST_GENERATE,
+
+   /* artificial hierarchy wrapper (for arrays) */
+   TREE_SV_ST_ARRAY,
  };
 
 #define WAVE_T_WHICH_UNDEFINED_COMPNAME (-1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/vcd.c 
new/gtkwave-gtk3-3.3.128/src/vcd.c
--- old/gtkwave-gtk3-3.3.126/src/vcd.c  2025-12-23 20:49:10.000000000 +0100
+++ new/gtkwave-gtk3-3.3.128/src/vcd.c  2026-07-21 04:27:37.000000000 +0200
@@ -1174,7 +1174,22 @@
                                         case 'f':       ttype = 
(GLOBALS->yytext_vcd_c_1[1] == 'u') ? TREE_VCD_ST_FUNCTION : TREE_VCD_ST_FORK; 
break;
                                         case 'b':       ttype = 
TREE_VCD_ST_BEGIN; break;
                                        case 'g':       ttype = 
TREE_VCD_ST_GENERATE; break;
-                                       case 's':       ttype = 
TREE_VCD_ST_STRUCT; break;
+                                       case 's':       {
+                                                       char *vht = 
GLOBALS->yytext_vcd_c_1;
+                                                       if(!strncmp(vht, "sv_", 
3))
+                                                               {
+                                                               switch(vht[3])
+                                                                       {
+                                                                       case 
'a':       ttype = TREE_SV_ST_ARRAY; break;
+                                                                        
default:        ttype = TREE_UNKNOWN; break;
+                                                                       }
+                                                               }
+                                                               else
+                                                               {
+                                                               ttype = 
TREE_VCD_ST_STRUCT; break;
+                                                               }
+                                                       }
+                                                       break;
                                        case 'u':       ttype = 
TREE_VCD_ST_UNION; break;
                                        case 'c':       ttype = 
TREE_VCD_ST_CLASS; break;
                                        case 'i':       ttype = 
TREE_VCD_ST_INTERFACE; break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/vcd_partial.c 
new/gtkwave-gtk3-3.3.128/src/vcd_partial.c
--- old/gtkwave-gtk3-3.3.126/src/vcd_partial.c  2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/vcd_partial.c  2026-07-21 04:27:37.000000000 
+0200
@@ -1113,8 +1113,23 @@
                                         case 'f':       ttype = 
(GLOBALS->yytext_vcd_partial_c_2[1] == 'u') ? TREE_VCD_ST_FUNCTION : 
TREE_VCD_ST_FORK; break;
                                         case 'b':       ttype = 
TREE_VCD_ST_BEGIN; break;
                                        case 'g':       ttype = 
TREE_VCD_ST_GENERATE; break;
-                                       case 's':       ttype = 
TREE_VCD_ST_STRUCT; break;
-                                       case 'u':       ttype = 
TREE_VCD_ST_UNION; break;
+                                        case 's':      {
+                                                        char *vht = 
GLOBALS->yytext_vcd_partial_c_2;
+                                                        if(!strncmp(vht, 
"sv_", 3))
+                                                                {
+                                                                switch(vht[3])
+                                                                        {
+                                                                        case 
'a':       ttype = TREE_SV_ST_ARRAY; break; 
+                                                                        
default:        ttype = TREE_UNKNOWN; break;
+                                                                        }
+                                                                }
+                                                                else
+                                                                {
+                                                                ttype = 
TREE_VCD_ST_STRUCT; break;
+                                                                }
+                                                        }
+                                                       break;
+                                        case 'u':      ttype = 
TREE_VCD_ST_UNION; break;
                                        case 'c':       ttype = 
TREE_VCD_ST_CLASS; break;
                                        case 'i':       ttype = 
TREE_VCD_ST_INTERFACE; break;
                                        case 'p':       ttype = 
(GLOBALS->yytext_vcd_partial_c_2[1] == 'r') ? TREE_VCD_ST_PROGRAM : 
TREE_VCD_ST_PACKAGE; break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtkwave-gtk3-3.3.126/src/vcd_recoder.c 
new/gtkwave-gtk3-3.3.128/src/vcd_recoder.c
--- old/gtkwave-gtk3-3.3.126/src/vcd_recoder.c  2025-12-23 20:49:10.000000000 
+0100
+++ new/gtkwave-gtk3-3.3.128/src/vcd_recoder.c  2026-07-21 04:27:37.000000000 
+0200
@@ -1517,8 +1517,23 @@
                                        case 'f':       ttype = 
(GLOBALS->yytext_vcd_recoder_c_3[1] == 'u') ? TREE_VCD_ST_FUNCTION : 
TREE_VCD_ST_FORK; break;
                                        case 'b':       ttype = 
TREE_VCD_ST_BEGIN; break;
                                        case 'g':       ttype = 
TREE_VCD_ST_GENERATE; break;
-                                       case 's':       ttype = 
TREE_VCD_ST_STRUCT; break;
-                                       case 'u':       ttype = 
TREE_VCD_ST_UNION; break;
+                                        case 's':      {
+                                                        char *vht = 
GLOBALS->yytext_vcd_recoder_c_3;
+                                                        if(!strncmp(vht, 
"sv_", 3))
+                                                                {
+                                                                switch(vht[3])
+                                                                        {
+                                                                        case 
'a':      ttype = TREE_SV_ST_ARRAY; break;
+                                                                        
default:        ttype = TREE_UNKNOWN; break;
+                                                                        }
+                                                                }
+                                                                else
+                                                                {
+                                                                ttype = 
TREE_VCD_ST_STRUCT; break;
+                                                                }
+                                                        }
+                                                       break;
+                                        case 'u':       ttype = 
TREE_VCD_ST_UNION; break;
                                        case 'c':       ttype = 
TREE_VCD_ST_CLASS; break;
                                        case 'i':       ttype = 
TREE_VCD_ST_INTERFACE; break;
                                        case 'p':       ttype = 
(GLOBALS->yytext_vcd_recoder_c_3[1] == 'r') ? TREE_VCD_ST_PROGRAM : 
TREE_VCD_ST_PACKAGE; break;

Reply via email to