Having no new questions, suggestions or information for a few days, I did a bit more digging. I still do not have an answer, but I do have some ideas where the experts can look.

I did find a work-around.  Details below ...

In the xTherion program, background images are loaded in lines 17846-17850:

      if {$ximage} {
        set imgid [image create photo -data $xdata]
      } else {
        set imgid [image create photo -file $ffname]
      }

I found a reference to "image create photo" at the main TCL web site:

https://www.tcl-lang.org/man/tcl8.0/TkCmd/photo.html

According to this, specifying "-file $ffname" will load the image using whatever format handler is registered for that type. Tk includes by default handlers for GIF and PPM/PGM formats. That is why PNG images still work.

I could not find where Tk stores registered handlers for additional image formats. There is a TCL function called Tk_CreatePhotoImageFormat which registers image format handlers. I see no call to that function in xTherion. I also see nothing in the Tk documentation as to whether the result of the function call is saved in a configuration file somewhere.

I could not find any sample code for Tk_CreatePhotoImageFormat which initializes a JPEG handler.

Workaround! xTherion includes a shebang line at the top which names its executable as "/usr/bin/env wish". I have two versions of wish on my system - 8.6 and 9.0. /usr/bin/wish is really a link to wish9.0. I modified xTherion to call for wish8.6 instead. That failed with an error about bwidget not found.

To fix that, I created a symbolic link:

ln -s /usr/share/tcl9.0/bwidget1.10.1/ /usr/share/tcl8.6/

That works. xTherion no longer complains about bwidget missing. More important - It now loads JPG files without error!

So what is the deal? What does wish really do? Did the set of default image handlers change between wish 8.6 and 9.0?

Someone - PLEASE!!! - do some serious debugging on this. It is beyond my skill and knowledge. The problem may not have hit other distributions, but it almost certainly will.

===============
Bill Gee

On 8/20/25 07:20, Bill Gee wrote:
Martin asked if tkimg package is installed.  It is installed.  I suspect if it were not, then png files would also fail.

==================
bgee@main2:~$ rpm -qa | grep -i tkimg
tkimg-1.4.16-4.fc42.x86_64
=================

Wookey - Therion is apparently compiled against libjpeg-turbo.

==================
root@main2:~# ps ax | grep wish
 467595 ?        Ss     0:00 wish /usr/bin/xtherion /public/document/ CaveSurveys/CaveSpringCave/thconfig

root@main2:~# lsof -p 467595 | grep -i jpe
lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
       Output information may be incomplete.
wish    467595 bgee  mem       REG                8,2    666168 9437408 /usr/lib64/libjpeg.so.62.4.0

root@main2:~# rpm -q --whatprovides /usr/lib64/libjpeg.so.62.4.0
libjpeg-turbo-3.1.0-2.fc42.x86_64
===================

The error message is coming from a TCL program.  TCL is an interpreted script - not an ELF image.  I think the concept of "compiled against library xxx" does not apply here.  Something in that script is loading libjpeg, but I have no idea what it is or where it is called.

Looking through the source code - I see the error message is generated at line 737 in me_imgs.tcl.  Looking at the code around that line, I do not see anything suggestive.  The message is triggered when an object named $imgid is null (line 735), which means some earlier code is not recognizing the jpg file as valid.  Or perhaps not even trying to load it??

Looking at package descriptions - openjpeg is intended for JPEG 2000 formats.  libjpeg-turbo is intended for general jpeg handling.


===============
Bill Gee

On 8/19/25 21:04, Wookey wrote:
On 2025-08-19 08:25 -0500, Bill Gee wrote:
It appears that xTherion will no longer load ANY jpg file.

The system is Fedora 42.  Therion is 6.3.4+dev, compiled back in April. I have several jpeg libraries installed:

root@main2:~# rpm -qa | grep jpeg
libjpeg-turbo-3.1.0-2.fc42.x86_64
openjpeg-2.5.3-6.fc42.x86_64
turbojpeg-3.1.0-2.fc42.x86_64
openjpeg-tools-2.5.3-6.fc42.x86_64
libjpeg-turbo-utils-3.1.0-2.fc42.x86_64
libjpeg-turbo-devel-3.1.0-2.fc42.x86_64
openjpeg-devel-2.5.3-6.fc42.x86_64
jpeginfo-1.7.1-6.fc42.x86_64
jpegoptim-1.5.5-6.fc42.x86_64
mjpegtools-libs-2.2.1-8.fc42.x86_64

OK. Just checked on Debian 13 (stable released last week) and therion will load jpegs OK there.

In case it helps:
therion 6.3.4-2                              amd64        Cave surveying - 2D and 3D drawing software libjpeg-turbo-progs 1:2.1.5-4                            amd64 Programs for manipulating JPEG files libjpeg62-turbo:amd64 1:2.1.5-4 amd64        libjpeg-turbo JPEG runtime library libturbojpeg0:amd64 1:2.1.5-4                            amd64 TurboJPEG runtime library - SIMD optimized

So your libjpeg-turbo is 3.x whilst I have 2.x. Maybe that's significant? I think libjpeg-turbo and openjpeg are alternatives. Check which therion is using on your system. Mine is linked against libjpeg.so.62 which comes from libjpeg62-turbo

Wookey

_______________________________________________
Therion mailing list
[email protected]
https://mailman.speleo.sk/listinfo/therion

_______________________________________________
Therion mailing list
[email protected]
https://mailman.speleo.sk/listinfo/therion

_______________________________________________
Therion mailing list
[email protected]
https://mailman.speleo.sk/listinfo/therion

Reply via email to