Page 1 of 1

Red() Green() Blue() ... bind libx stuff in Linux

Posted: Fri Jun 06, 2025 2:22 pm
by infratec
I wrote a linux console program for a server.

I saw missing lbx libraries :!:

I checked all code lines for MessageRequester() or similar things: nothing.

At the end I commented out large blocks to find the location of the code which requires the grafic gui libs.

At least I found it:

I used Red() Green() Blue() to build a hex string of a color.

I always thought these are only macros with & and >>, but ... shit, they link graphic libs to the code.

To test:

Code: Select all

; r = Red($123456)
OpenConsole()
PrintN("Hello World")
CloseConsole()
Compile it as console programm and use ldd to see the required libs.

Without the r line:
linux-vdso.so.1 (0x00007ffe9c7b8000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc40a89e000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc40a71b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc40a716000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc40aa7a000)
With the r line:
linux-vdso.so.1 (0x00007ffeb01e8000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe2a4f64000)
libcairo.so.2 => /usr/lib/x86_64-linux-gnu/libcairo.so.2 (0x00007fe2a4e44000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe2a4e23000)
libgtk-3.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-3.so.0 (0x00007fe2a4732000)
libgdk-3.so.0 => /usr/lib/x86_64-linux-gnu/libgdk-3.so.0 (0x00007fe2a4636000)
libpangocairo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007fe2a4626000)
libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007fe2a45d9000)
libatk-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0 (0x00007fe2a45b0000)
libcairo-gobject.so.2 => /usr/lib/x86_64-linux-gnu/libcairo-gobject.so.2 (0x00007fe2a45a4000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007fe2a457e000)
libgio-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007fe2a43be000)
libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007fe2a4368000)
libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fe2a4246000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fe2a4105000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe2a3f45000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe2a3f40000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe2a5103000)
libpixman-1.so.0 => /usr/lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007fe2a3e99000)
libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fe2a3e53000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fe2a3d95000)
libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fe2a3d5c000)
libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007fe2a3d57000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fe2a3d2d000)
libxcb-render.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007fe2a3d1e000)
libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fe2a3b14000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fe2a3900000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe2a38e2000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fe2a38d8000)
libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007fe2a38d2000)
libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007fe2a36c2000)
libXcomposite.so.1 => /usr/lib/x86_64-linux-gnu/libXcomposite.so.1 (0x00007fe2a34bf000)
libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007fe2a34b8000)
libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007fe2a32b2000)
libatk-bridge-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0 (0x00007fe2a327d000)
libxkbcommon.so.0 => /usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007fe2a323b000)
libwayland-cursor.so.0 => /usr/lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007fe2a3231000)
libwayland-egl.so.1 => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007fe2a322c000)
libwayland-client.so.0 => /usr/lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007fe2a3219000)
libepoxy.so.0 => /usr/lib/x86_64-linux-gnu/libepoxy.so.0 (0x00007fe2a30e7000)
libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007fe2a2fec000)
libpangoft2-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007fe2a2fd3000)
libXinerama.so.1 => /usr/lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007fe2a2fce000)
libXrandr.so.2 => /usr/lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007fe2a2dc1000)
libXcursor.so.1 => /usr/lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007fe2a2db4000)
libthai.so.0 => /usr/lib/x86_64-linux-gnu/libthai.so.0 (0x00007fe2a2da9000)
libfribidi.so.0 => /usr/lib/x86_64-linux-gnu/libfribidi.so.0 (0x00007fe2a2d8c000)
libmount.so.1 => /lib/x86_64-linux-gnu/libmount.so.1 (0x00007fe2a2d2d000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fe2a2b05000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fe2a2ae9000)
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fe2a2adf000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fe2a2a6b000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fe2a2a2e000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fe2a2a25000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fe2a281f000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fe2a2619000)
libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007fe2a25c6000)
libatspi.so.0 => /usr/lib/x86_64-linux-gnu/libatspi.so.0 (0x00007fe2a2592000)
libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007fe2a2565000)
libdatrie.so.1 => /usr/lib/x86_64-linux-gnu/libdatrie.so.1 (0x00007fe2a2559000)
libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007fe2a2504000)
libbsd.so.0 => /usr/lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fe2a24ea000)
libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007fe2a2449000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fe2a2421000)
liblz4.so.1 => /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007fe2a2400000)
libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007fe2a22e2000)
libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fe2a22bf000)
I think this should be fixed.
I use now bit stuff to get the colors and all is fine.

Fred, if you agree, shift it to Feature Requests - Wishlist

Re: Red() Green() Blue() ... bind libx stuff in Linux

Posted: Fri Jun 06, 2025 2:26 pm
by Fred
Red() is in the 2DDrawing lib which use gtk surface etc., that's why it's needed. To avoid that, the commands needs to be moved into another lib, or we need to split the lib in half. I will take a look what's best.

Re: Red() Green() Blue() ... bind libx stuff in Linux

Posted: Fri Jun 06, 2025 4:56 pm
by infratec
Aren't there 'global' Macros ?

I would implement this 'helpers' as macros.

Code: Select all

Macro Red(color)
  (color & $000000FF)
EndMacro

Macro Green(color)
  ((color & $0000FF00) >> 8)
EndMacro

Macro Blue(color)
  ((color & $00FF0000) >> 16)
EndMacro

Macro Alpha(color)
  (color >> 24)
EndMacro