================================================================================
Version: 3.3.41
Patch: 00
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

A few minor errors in gpu id led to a long needed update to gpu data sources and
detection logic, as well as forcing some known gpu IDs to the right generation.

This is why filing issues on in particular legacy hardware is important, if you 
don't do it, it won't get done since nobody else will see that issue.

Also some new ARM SoC changes led to debugger updates to prevent hangs, and to
adding some possible /sys paths to build up the device list. This latter will 
sadly always be rough and dirty because there are no real rules for these paths,
and vendors can and do break existing methods, sometimes, as in the case of the 
new OrangePi Zero, in ways that inxi just cannot work around. But we try.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. Codeberg issue reporter eemz issue #351 for finding several debugger hangs
in his new OrangePi Zero SoC.

2. MrMazda, as always, for catching the wrong gpu arch id for fermi/kepler era
devices. That required adding some manual 470 driver ids to force those to get
assigned to the right architecture.

3. Following mrmazda, Codeberg issue #354 JoseskVolpe for finding more legacy 
gpu id errors, in this case in the Atom series. 

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. GPU IDS: it's almost certain due to fuzzy way nvidia mixed kepler2 and fermi2
devices in their naming/numbering sequences that some of the ids for either will
be wrong, but it's a case of it can only be fixed by breaking another one that 
worked. The only fix is to inject manually the product name and id to the 
gpu.nv470.manual file, and handle each known good product ID explicitly to 
generate the matching lists.

2. DEVICE DATA: The ARM SoC Orangepi 0 puts its bluetooth and wifi device data
in a weird place:

/sys/devices/platform/unisoc_wifi/uevent:["DRIVER=unisoc_wifi", 
"MODALIAS=platform:unisoc_wifi"]

Here the actual device is just called mtty, and the only hint is that it has 
rfkill info:
  /sys/devices/platform/mtty/uevent:["DRIVER=mtty", "MODALIAS=platform:mtty"]
/sys/devices/platform/mtty/rfkill/rfkill1/uevent:["RFKILL_NAME=bluetooth", 
"RFKILL_TYPE=bluetooth", "RFKILL_STATE=1", "RFKILL_HW_BLOCK_REASON=0x0"]

/sys/devices/virtual/tty/ttyBT0/uevent:["MAJOR=242", "MINOR=0", 
"DEVNAME=ttyBT0"]

Neither of which really work with the existing device platform / tree data.
There's no obvious way to hack around this, because there are no OF_FULLNAME or
OF_COMPATIBLE_0 values in uevent data. Trying to hack around this is risky and
highly likely to break other things that are working, it's something I would 
only attempt if I had ongoing access to many SoC devices, which I don't.

--------------------------------------------------------------------------------
BUGS:

1a. eemz reported in codeberg issue #353 that orange pi zero 3w crashes when 
running the /sys debugger, due to a specific file that will shut the machine 
down instantly when accessed.

1b. After fixing 1b, eemz found another hang, not a crash, on file 
sunxi_mmc_send_status. This file appears to read infinitely, probably sending 
live status is my guess. 

--------------------------------------------------------------------------------
FIXES:

1a. Added /sys/class/udc-debug/udc_reg to /sys debugger parser blacklist, to 
correct bug 1. Changed blacklist regex from /debug to /[^/]*debug.

1b. Added [^/]*_send_ to blacklist filters to get rid of sunxi_mmc_send_status
infinite send hang.

2a. DEVICEDATA: Added negative test for pwrseq in network, that's not a network 
device, it's a power controller of some type.

2b. DEVICEDATA: Added another file grabber for raspi 5 ethernet:
/sys/devices/platform/axi/1000120000.pcie/1f00100000.ethernet/uevent

--------------------------------------------------------------------------------
UPDATES:

1a. GPU IDS: Adjusted fermi-2/kepler-3 ids, those are very hard to detect, used
some mrmazda samples to move a bad fermi id to kepler.

1b. GPU IDS: Updated to support nvidia 580 legacy driver, added nvidia product 
IDs up to current lists.

1c. GPU IDs: tweaked intel 3.5/PowerVR SGX535 product ID detections, updated 
some intel gpus too. Figured out how to use the bad html tables from intel for
new generation cpus

1d. GPU IDs: a few new amd gpu ids. Also fixed cdna-3 vs cdna-4 detection, turns
out cdna 3 is Mi300, and cdna 4 is Mi350, which was odd.

2a. CPU ARCH: Changed zen 6 IDs, new better cpuid data. 

2b. Intel has FINALLY created new CPUID families!! 3F appears to be their 18A 
consumer line, and 4F their 18A server line, at least that's the early info I 
have. Added those.

This is a big deal, because I was getting really close to dumping the effort to
ID new Intel CPUs because they had gotten absurdly convoluted due to refusing to
change from their decades family ID 6.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. None.

--------------------------------------------------------------------------------
CHANGES:

1. Nothing to speak of beyond fixes and updates.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. DOCS: pinxi/docs/inxi-graphics.txt: updated paths and some info for gpu 
vendor data sources.

--------------------------------------------------------------------------------
CODE:

1. tools/cpu_arch.pl: finally have new Intel cpuid family IDs!!

2a. tools/gpu_ids.pl/gpu_raw.pl; Added legacy nvidia 580, added 595 and 610 gpu 
IDs.

2b. tools/gpu_ids.pl; gpu.nv.470.manual: Added known correct names to generate 
more reliable product ID matches for fermi2/kepler2. Also changed the regex to
detect those.

2c. tools/gpu_ids.pl; added some gpu.intel.manual ids to force into gen 3.5.

2d. tools/gpu_ids.pl: improved amd detections.

--------------------------------------------------------------------------------
-- Harald Hope - Wed, Uuly 1 2026 20:53:23 -0700

================================================================================
Version: 3.3.40
Patch: 00
Date: 2025-11-25
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

This is a quick release to get the bug fix out.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. Codeberg user wonky issue #347 for reporting the break of --output-file 
option in 3.3.39.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1a. CPU: cpu_arch: impossible to determine with available data what pentium 4
model 6, stepping 5 really is.

1b. CPU: dmi table reports wrong socket for Intel pentium 4 cpu, but no way to
correct that, oh well.

--------------------------------------------------------------------------------
BUGS:

1. OPTIONS: Accidentally copied the --output handler to the --output-file
handler, which breaks --output-file completely of course. Since this completely
breaks functionality of --output this is an urgent bug fix.

--------------------------------------------------------------------------------
FIXES:

1. MACHINE: Corrected use of a value for field name with BIOS/UEFI etc. 
Now correctly shows: 
  Firmware: BIOS
    vendor: American Megatrends LLC.
    v: F62d
    date: 10/13/2021

This has been wrong for a long time, the rule for inxi is that field names are
not values, but that rule was violated in this case. Thanks mrmazda for noticing
that.

1. OPTIONS: Going along with Bug 1, there was a missing default for setting 
$output_file to 'print' automatically when type 'screen' was used. But that 
basically just completely restores default inxi output behaviors.

--------------------------------------------------------------------------------
UPDATES:

1a. CPU: cpu_arch: new data, AMD family BF model 80 is Zen 6, that was not 
assigned so would fall back to default Zen 5.

1b. CPU: cpu_arch: old data, thanks mrmazda, Pentium 4, family 15, model 6, 
stepping 5 is 45nm, and thus 2008 generation, not 65nm and 2006. However Intel
very typically used the same model/stepping for 65nm, so no way to know. I 
didn't realize their absurd use of family/model/stepping reached back this far.

Added comments to indicate this, but since we can't know which is which, can't
really change anything.

--------------------------------------------------------------------------------
ENHANCEMENTS:

None.

--------------------------------------------------------------------------------
CHANGES:

None.

--------------------------------------------------------------------------------
DOCUMENTATION:

1. OPTIONS/MAN: --output-file/--output: cleaned up docs, made it more clear what
the screen and print options actually do.

--------------------------------------------------------------------------------
CODE:

Nothing worth mentioning beyond the bad copy paste bug fix for bug 1..

--------------------------------------------------------------------------------
-- Harald Hope - Tue, 25 Nov 2025 11:54:13 -0700

================================================================================
Version: 3.3.39
Patch: 00
Date: 2025-08-29
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Refactor and updated of the Battery item, that was sorely in need of tightening 
and better testing and robustness. Now all math occurs either in data sources, 
to set to consistent units, or in the processing function. Also long overdue 
fixes for Chinese CPU makers Loongson and XhaoXin. Plus other general fixes and
updates.

Note the new section UPDATES:, which is for routnely updated data and matching
tables. These were previously tossed into ENHANCEMENTS:, but that never seemed 
quite right since they aren't really new features or anything, just ongoing
updates. So now they go in their own section. This will also make ite easier to
see what's actually new vs what is just updated.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. MrMazda, for plugging away at thankless testing and tasks all these years, 
keeping the desktop and graphics parts honest.

2. matt-2025, codeberg issue #340, for giving enough data and feedback to expose
that the Battery item needed a significant refactor to improve reliability and
accuracy.

3. iv-m, codeberg issue #342, for supplying data required to properly support 
Loongson CPUs. I've waited a long time to find such data, so it was great to 
finally get the real debugger data required.

4. Ricky-Tigg: for finding some nice subtle things that needed fixing.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1a. CPU: cpu_arch is making some guesses about family of zen 7, but no data is 
available. The guess is that amd is going to give 7 a new family ID. 6 did not 
get a new family ID afterall, so that's back with 5 now.

1b. CPU: ARCH: I'm finding it, as with GPU, increasingly difficult and tedious 
to dig up Intel data. I may give up trying at some point because it's getting 
too convoluted and boring to track. 

2. GRAPHICS: GPU: I'm finding it increasingly difficult to track gpu product IDs
and their relative architecture data. If you want this to be more accurate and
reliable, it's probably time for someone other than me to step up and start 
tracking this data. Intel in particular is extremmely difficult to track since 
they blend marketing and engineering so badly, both in GPUs and CPUs.

3. BATTERY: Sometimes charge_full is less than charge_now, or energy_full <
energy_now. This is a bug with the battery, since the _full is supposed to show
current max capacity when full, which is not the same as the original design 
capacity, which is almost always more. Since it's not possible to know which
value is wrong, inxi just shows them as is, which leads to sometimes charge:
item showing a value > 100, like (110%)> There are too many possible reasons 
to try to figure it out or guess. It does show note: check now though.

One system that did this stopped immediately whenn I unplugged it, and when I 
plugged it back in, it showed the correct 100%. So this is something that is 
not updating, or is getting the wrong data at some times.

--------------------------------------------------------------------------------
BUGS:

1a. BATTERY: in case /sys power file not readable, tested for is root, not is not
root. That means the message would not have shown for non root  users, who are 
who needed to see it.

1b. BATTERY: See Fixes 4. The bug was dividing by zero, but that was just a 
symptom of the core issue, which required fixing the entire battery item. inxi 
had prematurely switched 0.01 Wh to 0 with sprintf, which then created the 
divide by 0 condition, and also some other oddities.

2. CPU: incorrect use of get_defined in one test led to useless result.

--------------------------------------------------------------------------------
FIXES:

1. Downloader: Tiny::HTTP is supposed to default to no check ssl, but I found a 
case where it has to be set explicitlly to not check or it does. 

2a. CPU: cpu_arch() had the wrong family ID for amd zen 5 cpus, it had 20 instead
of 1A, I forgot that was hex number. Also fixed comments there, and made more 
clear how the hyper confusing amd cpu family matches to what you see in cpuinfo 
and other places.

2b. CPU: cpu_arch: corrected some Loongson Arch names; fixed glitch that made 
features use -f message not appear for -Cx with Loongson CPUs. Overall added 
loongsn to %risc ID method which solved most of the Loongson issues.

3. DesktopData: Extreme corner case, it looks like OpenSuse now correctly does 
not set the environmental variables used for desktop detection, which then broke 
kde/tde detections. Note this condition only happens when the session is started 
as root, AND when kde was started by tdelauncher. I believe the number of people 
in the world this might affect numbers around 1, maybe 2 or 3 on the outside, 
and only on new OpenSuse. 

When started as non root, all the environmental variables are set as expected. 
It is however faintly possible that kde detection might also have failed since 
that required postiive matches to the environmental variables, but it might get 
caught later on in a fallback test, I don't know.

3. GRAPHICS: GPU: I changed some Intel GPU ids, with more recent data, but 
tracking this stuff is getting tiresome, so if there are errors, do the research 
and help, don't complain.

4. BATTERY: Thanks codeberg issue #340 matt-2025 for noting a crash when his 
values were 0 for energy_full. Due to premature rounding of 0.01 and connversion 
to string with sprintf, 0.0 was being treated as a string and not 0.

Also, if energy_full is less than 1, will show the actual energy and of_orig 
values, using sprintf('%.1g', which trims to first signficant number in decimal.

Battery:
  ID-1: BAT0 charge: 0.01 Wh (100%) condition: 0.01/62.6 Wh (0.02%)
    alert: bad battery? volts: 11.7 min: 10.8 model: SANYO 45N1172 type: Li-ion
    serial: 3058 status: not charging
    
Adds an alert: item if percent of original capacity is < 5%, or if energy_full, 
the current maximum real capacity, is less than 1 Wh.

This is a corner case for sure, first time I'd ever seen a battery this degraded
but still showing values for Wh available. 

5. MACHINE: dmidecode sourced EEPROM size was in MB instead of having been 
internally translated to KiB integers then correctly shown as MiB for output.

--------------------------------------------------------------------------------
UPDATES:

1a. TOOLS: tools/cpu_arch.pl: Expanded Loongson section significantly.

1b. TOOLS: tools/cpu_arch.pl: Added separate ZhaoXin section, before it was with 
Centaur, which was useless since the two have developed separately. This allows 
for detecting both types more accurately.

1c: TOOLS: tools/gpu_raw.pl, tools/gpu_ids.pl: added nvidia 580.

2. RAM: tools/ram_vendors.pl > set_ram_vendors(): added CXMT ChangXin Memory 
Technologie ID.

3. GRAPHICS: GPU: Added new AMD, Intel, Nvidia gpu IDs.

4a. CPU: cp_cpu_arch(): New AMD, Intel cpu IDs, a few changed or fixed with new 
data.

4b. CPU: cp_cpu_arch(): Big expansion of ZhaoXin CPU arch data, and added 
explicit detection for zhaozin $cpu->{type}, before fell into centaur.

4c. CPU: cp_cpu_arch(): Big expansion of Loongson CPU arch data, and added 
explicit detection for loongson $cpu->{type} and $risc{'loongson'} %risc type.,

5. SYSTEM: DistroData: updated ubuntu_id() up to 25-10. Those had fallen behind; 
updated debian_id() to 15.

6. DRIVES: set_disk_vendors(): More vendors, ID matches. Less than usual, but
it's getting more likely inxi has it handled. 

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. BATTERY: Added new fields/values:
* -B - added note: check if capacity > 100%, causes unknown and inconsistent.
* -x - health. String report. Always show if health not 'good'. Not common.
* -x - battery temperature, in C. Not common.
* -x - append capacity_level string if capacity is present. [not used due to 
      weird string value critical on a near fully charged battery]
* -xxx - manufacter date made:, Doesn't show if not available since not common.
* -xxx - add temp_min/temp_max under temp if available
* -xxx - add charge_type if found
* -a - add charge_control_start_threshold/charge_control_end_threshold 
      charge_behavior if found.
* -a - add available charge_types list, if found. This will include the active
      one.
      
Changed:
* -xx - creates new 'charging:' block.
* -xxx cycles to -xx cycles. And show N/A if not found, I think it's good to 
know that info is not available.

--------------------------------------------------------------------------------
CHANGES:

1. BATTERY: Switched voltage decimals to 2 places, and also added 0 to all 
resultss to both convert back to numeric, and to get rid of extra 0s at end of
the decimal. Some data sources already had 2 decimal voltages, like OpenBSD, so
this just makes them all have them. Also slightly reordered output fields to 
make them fit into somewhat logical sub catetories. Put main battery status 
into a 'report' container.

2. GRAPHICS: GPU: Changed RDNA-4 release data and process node size. Data for 
this stuff is getting harder to find that is solid.

3. CPU: For -Cx, shows Flags-basic: instead of Flags if -f is not used. It has
never been intuitive that there might be more flags, you'd need to be into it
to get that.

--------------------------------------------------------------------------------
DOCUMENTATION:

1a. inxi.changelog/pinxi.changelog: fixed 3.3.38 date on bottom, ooops.

1b. inxi.changelog/pinxi.changelog: Added UPDATES: section, this holds updates 
to existing matching data tables and manually generated matching rules, like gpu 
ids, cpu microarch data, disk vendors, ram data, etc. inxi has an unfortunately 
large number of such manually generated rules, or tool generated, and updates to 
that have never really been enhancements to inxi, it's just an update to 
somoething that already exists but is missing matching sets.

2a. MAN page: fixed typo.

2b. MAN pages: Added info about bad battery data for -B Battery.

3. MAN/OPTIONS: Updated for new battery features and changes.

4a. DOCS: inxi-cpu.txt: updated the amd cpu family id list, that was not clear,
but is hopefully more clear now.

4b. DOCS: inxi-cpu.txt; inxi-values.txt: Added loongson docs, and loongson %risc
values.

4c. DOCS: inxi-cpu.txt: Added zhaoxin docs.

4d: DOCS: inxi-battery.txt: upgraded, added more sections, /sys data types.

--------------------------------------------------------------------------------
CODE:

1. BATTERY: refactored significantly. Moved all math out of output, remooved all 
sprintf %.1f in early stages, and moved all advanced processing for all data 
source types to one function, process_battery_data(), which also got rid of 
redundant logic, and removed sources of error. It was very clear that Battery 
item was one of the Bash > Perl literal translation items I did early on, and 
quickly.

Also got rid of random ways of testing for null data, and switched to using
undefined as false, and left all numeric values as number types until the very
last processing stage, where they are converted with sprintf for print output.

Since 0 is now 0 and not the string '0.0', true/false tests work as expected, 
with 0 values triggering the use of the smaller > 0, < 1 decimal numbers and 
showing the alert message as well.

2a. MAIN: clean_dmi: failed to filter for SerialNumber as unset value, but did
oddly have SerNum. Made all default unset strings more robust.

2b: MAIN: Added $risc{'id'} = 'loongson'. Turns out since 5000, it's its own 
ISA. Also added --risc [available risc types] in case that is easier to remember
for devs or me.

2c. MAIN: clean_disk(): Added (name\s)?n\/a to cleaner.

--------------------------------------------------------------------------------
-- Harald Hope - Fri, 29 Aug 2025 15:37:40 -0700

================================================================================
Version: 3.3.38
Patch: 00
Date: 2025-04-06
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

A small fix/glitch release, nothing exciting. 

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. Codeberg user dtl131 in issue #314 for noticing Vulkan gpu device driver 
field always had N/A value. See fix 3.

2. Anonymous OpenBSD vm dataset, some value were unset that were expected, which 
tripped a few errors, those are all now more explicitly tested for.

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. If 2>/dev/null is used with tput, in FreeBSD it changes output to 80x24, 
but with OpenBSD error using xterm-ghostty, it says unknown terminal error.

If I suppress the error correctly, FreeBSD breaks, but if I don't, some corner 
cases of some terminals show error.

Since the FreeBSD behavior is wrong, and the OpenBSD behavior is right, I opted 
to restore the 2>/dev/null to the tput items. It doesn't really matter that much 
now that inxi defaults to 80 col widths, which is the default replacement when a 
bad value for tput cols is found.

--------------------------------------------------------------------------------
BUGS:

1. SENSORS: small bug: lm sensors data for sodimm was getting the wrong values
($1 and $2 instead of $2 and $3).

--------------------------------------------------------------------------------
FIXES:

1. PackageData: failed to show Packages: N/A when pm not supported and a total 
count == 0 for -Ixx and greater verbosity. Did show for -Ix, and always showed
for -rxx and greater.

2. Issue #315 pointed out two typos in error message. Thanks for noticing!

3. GRAPHICS: GraphicItem::vulkan_data() used VkPhysicalDeviceDriverProperties 
to get driver data per device, but current vulkaninfo has dropped that data 
block in favor of the VkPhysicalDeviceVulkan12Properties block, which has always 
been there. This made the 'driver:' for device always show N/A. Solution was to
just use the other field name, since it's always been there as far as I can 
tell.

4. MAIN: set_display_size OpenBSD showed errors, because error suppression not 
on for tput. Also is_jnt test passed for "", resulting in more errors. Cause was 
not first testing for 0 length, wnich made 0 occurances of tr/// result match 0 
length of string.

5. CPU: cpu_sysctl_data failed to test if $line[1] was set. This resulted in 
OpenBSD errors since the value was 'unknown', which had been stripped out by
cleaners. Now skips if $line[1] undefined.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1a. SYSTEM: DISTRO: added side ID. Oddly, despite being new, it uses old method,
/etc/side-release. Added known good side-release in case they add os-release.

1b. SYSTEM: DesktopData: Added SDE DE. Side uses that one. No version. GTK 2 
based. This also fixes showing the wm as the DE, like Openbox.

2. PackageData: Added pisi pm. No idea how that escaped notice. That was using
side, which uses pisi.

3. GRAPHICS: New gpu ids: amd, intel, nvidia. Added blackwell gpu ids. Added a 
missing kepler gpu product ID via manual method.

4. BATTERY: Prompted by codeberg issue #341 checked and found newer battery 
power data in /sys/class/power_supply.

alarm ([t minimum Ah level]

--------------------------------------------------------------------------------
CHANGES:

None.

--------------------------------------------------------------------------------
DOCUMENTATION:

None.

--------------------------------------------------------------------------------
CODE:

1a. TOOLS: tools/gpu_ids.pl: added nvidia blackwell detections.

1b. TOOLS: added un-id'ed nvidia kepler 470 gpu to manual file.

2. MAIN: is_int, is_numeric: made code more readable and debuggable.

3. CPU: cpu_vendor: return '' if the value passed is undefined. Another odd 
OpenBSD error which I can't reproduce but a vm instance did since it was missing
more data.

--------------------------------------------------------------------------------
-- Harald Hope - Sat, 06 Apr 2025 11:34:53 -0800

================================================================================
Version: 3.3.37
Patch: 00
Date: 2025-01-06
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

* This release is highlighted by a long overdue rewrite of the -b, -e, and -v[x] 
man page and help options. And changing the long incorrect -F/--full to 
-e/--expanded, which is more accurate. -e expands -b, that is, but is not full. 
-v8 is full. -F/--full will keep working until this inxi is in the stable repos
of the major distros.

That change turned out to be surprisingly hard, but those options are now much 
more clear and well defined. Some of the actions have not been valid for many 
years, but escaped notice.

This also makes the report generator options -b, -e, and -v [x] all make sense,
and easily reference each other in the docs. And keeps them consistent by them 
all be lower case options. Upper case is intended mainly for feature item 
triggers.

* Packagers: I reluctantly created and added the AppStream XML file:
inxi.metainfo.xml
so that GUI package managers that can't get package data from the packages can 
manage to show inxi. Do I care? No, but sometimes not everything in inxi is 
stuff I care about.

https://freedesktop.org/software/appstream/docs/chap-Metadata.html
"Upstream projects can ship one or more metainfo files in 
/usr/share/metainfo/%{id}.metainfo.xml, where id is a unique identifier of this 
specific component."

The ID must be exactly the same as the Application-ID: org.smxi.inxi (but many 
of the file names I checked don't, so that could just be specific to certain 
package collector tools like flatpak). 

Translation: the inxi.metainfo.xml file must be stored here:
/usr/share/metainfo/org.smxi.inxi.metainfo.xml

Note that these are not enforced standards, and a quick look in that directory 
shows many don't follow the file naming convention. So do what you want. And 
most applications do not ship this file, for good reason: it's a waste of time.

* Another longstanding mrmazda graphics enhancement request, handling scaling
per monitor. Adding this exposed some failures in wayland-info, and false 
assumptions in xrandr parsing. Now with -Gxxx shows current mode, scaling, and
if scaling not 1, the scaled monitor display size.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. Codeberg issue #311 poster jkirk for doggedly noting that the use of the word 
'full' as an option and man/help term for -F/--full was confusing and wrong. 
It's other eyes that can see what my eyes are too used to, and have ignored for 
years. See Changes 1 for -e/--expanded solution.

2. mrmazda, for his continuing thoughts and suggestions to make Graphics and 
System better, and more helpful to support people such as him. Also for finding
that obscure and arcane eglinfo hang issue 

--------------------------------------------------------------------------------
KNOWN ISSUES:

1a. GRAPHICS: StarFive VisionFive 2 apparently uses the Imagination BXE GPU, 
maybe img-bxe, but that does not show up in any of the pci or device data for 
the soc. Result is -G and -A show no device even though there is an HDMI GPU and 
MIPI graphics. This may show in a future kernel however.

1b. GRAPHICS: Very old Intel Pentium 4 and gen-2 GPU system intermittently fails 
to fully execute eglinfo. Since this combination is largely useless, inxi now 
detects those Gen 2 and earlier Intel GPU product IDs and skips running eglinfo
and shows message.

2. SYSTEM: KernelCompiler: the tendency to add in more gibberish nonsense to the 
old and clean and simple /proc/version continues unabated, almost like a 
competition between distros who can make the silliest strings. Last year's 
winner if I remember right was Ubuntu, but Redhat is not to be outdone with 
their 2024 contribution!

3. DISTRO PACKAGING: thanks mrmazda for spotting what appears to be an OpenSuse 
packaging bug, which inxi can't fix or work around. It's likely this is also in 
RHEL and related, but I don't know: 
* The core modules package which has been incorrectly split out from Perl for 
File::Find spits out an 'uninitalized value $space in concatenation in pinxi 
line 1620 is actually File::Find->import action exposing the undefined value. 
This does not happen in current Debian Testing, or any other distro I've tested 
on.
* There may be a second issue with eglinfo, but there is simply not enough data 
to pinpoint causes.

--------------------------------------------------------------------------------
BUGS:

1. PackageData: didn't have option for OpenBSD pkg_info, which made inxi skip 
that package counter, and show no packages. Ooops. Switched to use -a, for all
non system package. Could use -A to include system packages,but I think pkg_add
implies you added them outside of core base.

2a. GRAPHICS: not so much a bug as a syntax change in wayland-info led to some 
data not being grabbed, but it would not have worked anyway due to more wrong
assumptions. xrandr also had an assumption about what the 'connected' value was
that was not right.

2b. GraphicsItem::wlinfo_data(): unset monitor data in active, not fake data,
logic, which resulted in removing the EDID data. Ooops.

--------------------------------------------------------------------------------
FIXES:

1. SYSTEM: KernelCompiler: issue 310 adds another convoluted /proc/version 
syntax, these seem to be coming along every year now. Let's hope the kernel guys
create a /sys kernel compiler directory with key value pairs for this absurd 
jumble of data that is being tossed into /proc/version string.

Note that these types of random new strings will never be called bugs when they 
fail, but they do require fixing, at least until we get a better data source for 
the kernel compiler data.

2. OPTIONS: See Changes 1. Changed -F/--full to -e/--expanded to more accurately
reflect what -e actually does. -F/--full will work for a long time however since
many online inxi docs suggest that option. First step will be deprecation 
notice, then eventually removal. But not for a few years, until this inxi is in
stable repo pools.

3a. GRAPHICS: GraphicsItem::wlinfo_data() had a subtle failure because 
wayland-info used random numbers of spaces in one key string. Amusingly, the 
comments above that said to expect the data to alter, which it did. This caused
the resolution to show the logical, scaled, not the actual physical, as 
intended.

3b. GRAPHICS: GraphicsItem::xrandr_data() had a false assumption about what the
dimensions following 'connected' were. Those turned out to the logical monitor 
size, not the modes. This was not obvious until scaling became used more. Now
uses the actual current mode from the mode list, which is what we want, and 
uses the logical size to create the scaling data.

3c. GRAPHICS: GraphicsItem::swaymsg_data(): fixed hz for non json version, that 
would never work due to logic vs data error.

3d. GRAPHICS: EGL API tool eglinfo hangs on some very old Intel GPUs, so added 
a blacklist which skips running tool unless --egl flag is also used to force it.

4. UPDATER: Fixed error which made --no-man for -U on inxi not work.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1a. GRAPHICS: X Driver detections. Added, per:
https://lwn.net/Articles/558104/
Some more possible fb and drm drivers: vesafb, efifb, simplefb, and simpledrm.

1b. GRAPHICS: rolled out first attempt to have real scaling data per monitor.
This uses the logical size, aka, the scaled size, and the actual active mode 
resolution, to generate the scaling factor.

There had been a weak effort for wayland to do this, but the way wayland does 
scaling is weird, so it's better to show the actual factor. I don't know the 
status of the wayland scaling issues, but they used a real convoluted hack of
wayland only doing integer scaling, which forced compositors to up the integer
then divide it by something to get the desired fractional scaling. So that data 
in inxi had always been wrong, though it's still being captured and stored 
internally in case I can ever think of something useful to use it for.

If a positive scaling is calculated with logical and physical, -Gxxx will show 
that information. If scaling != 1, also showed scaled dimensions.

For scaled (wayland):
res:
  mode: 1680x1050
  scale: 125% (1.25)
      to: 1344x840
hz: 60

For scaled (xrandr):
res:
  mode: 1680x1050
  scale: 125% (0.8)
      to: 1344x840
hz: 60

For scaling == 1:
res:
  mode: 1680x1050
  scale: 100% (1)
hz: 60
      
If no scaling data found, or if less than -Gxxx:
  
res: 1680x1050

As far as I can tell, x11 Screen size is always scaled size.

1c. GRAPHICS: -Ga now adds an Info: Tools: line, similar to what -n, -S, -I have 
for services and tools. Shows detected (mostly) display control/info command 
line tools from the following categories:
* api
* de (desktop environment)
* gpu
* wl (wayland)
* x11

1d. GRAPHICS: updated amd, intel, nvidia ids. 

2. SYSTEM: added hypridle to locker list, not sure how I missed that one.

3. INFO: Added conemu, contour, dolphin, ghostty, mintty, phyxis, rio, warp to
start client white list. These are all terminals except dolphin, which is like 
kate, has the embedded kde terminal.

4. DRIVES: A few new disk vendors and IDs. Surprisingly few actually.

5. CPU: A few new AMD cpu model IDs.

--------------------------------------------------------------------------------
CHANGES:

1a. MAN/OPTIONS: going with 1b, changed -F to -e. -F will keep on working for a
long time, but the report shortcuts -b and -v are already lower case, so no 
reason to continue with the use of the legacy -F for full when it hasn't been 
full for ages. Also, it's nice to be consistent and keep all these lower case.

1b. MAN/OPTIONS: removed reference to --full/-F for -e, though it will of course 
keep working. Technically --full should be a synonym for -v8, since that's the
full system report. After deprecating -F/--full on a future release, it will be 
removed since it's not accurate, and can confuse people. But that will be in the 
distant future given how many resources suggest -F, or, shudder, --full.

This came about because a long time ago, -F actually did trip all the upper case 
options, and only upper case. That however stopped being the case probably 10
or more years ago, but the old full connotation for -F remained, and I foolishly
maintained it when I did the perl inxi rewrite. That would have been the time to
change it, but I was busy with the rewrite and it didn't register enough.

2a. GRAPHICS: if -xxx and monitor scaling detectable shows if not scaling 1: 
res: mode: widthxheight scale: 80% (0.8) to: widthxheight 
If scaling 1, just shows:
res: mode: widthxheight scale: 100% (1)

So far scaling can only be detected with xrandr, swaymsg, wayland-info, 
wlr-randr, and maybe weston-info. This translates the real terms used internally 
by x11 and wayland.

This is a change from res: widthxheight. 

2b. GRAPHICS: To show hz, now shows with -Gxx, not -Gxxx, it never made sense to
treat the resolution and frequency as different verbosity levels.

2c. GRAPHICS: For GPU arch: data, I stopped trying to use the convoluted post 
Intel Gen11 architecture, and switched to the basic less granular arch that 
Intel's own product ID docs use. Like Xe, Xe2, Xe-LPG, Xe-HPC, Xe-HPG. 

--------------------------------------------------------------------------------
DOCUMENTATION:

1a. MAN/OPTIONS: changed -F/--full to -e/--expanded. And changed wording, 
removed Full, which was wrong, it's not full. It used to be a long time ago, but 
hasn't been for a long time, which caused confusion. -F/--full will still work, 
but will not be shown anymore as the first step towards deprecation then 
removal.

Also added deprecated pointer to -e/--expanded for -F/--full so users can find 
that easily.

Also changed -b to reference -e for expanded output, and -e to point to -b for
basic output. -b and -e are basically related, which was not obvious before.
-e for example expands the minimalist CPU line of -b to the full -C CPU line, 
and expands block devices Drives to -D and -P. And expands multimedia from -G to
-G and -A. And expands -b's -N to -n.

1b. MAN/OPTIONS: Refactored -b, -e, and -v completely. There were some legacy 
items in -v that were not applicable anymore, or just plain wrong. It might be 
worth checking to see if the simple forms of -d still are in the code. The -h 
also had for -v 2 short RAID form, but I don't think that ever existed.

These are all now much more readable and clear, and list items in the order they 
appear in the output as they are added. 

Also, -b and -e now point to each much more clearly, and -e notes where the 
items have been expanded from -b.

-b, -e, and -v are also now the same format and structure in man and options.

1c. MAN/OPTIONS: Going along with the other 1 changes, I replaced the word 
'output' in man and help where it refers to a report. That word was being 
overused to refer to 3 different things. Now reports are reports, output is 
output.

1d. MAN/OPTIONS: Updated -G items for resolution changes.

1e. MAN/OPTIONS: Added -Ga Info: Tools: feature.

1f. MAN/OPTIONS: Added more missing force items. Fully redid these to make them 
complete, which went along with making the internal use of them more consistent.

2. DATA: Added nice wayland-info sample.

3a. DOCS: docs/inxi-graphics.txt: added section for resolution/modes/scaling 
because its' confusing and hard to explain.

3b. DOCS: docs/inxi-graphics.txt: added DISPLAY TOOLS section to docuement the
various tools I found for the new -Ga Info: Tools feature.

--------------------------------------------------------------------------------
CODE:

1. OPTIONS: There's some legacy use of $show{'optical-basic'} and 
$show{'raid-basic'} which the man/options refactor exposed. Neither actually 
does anything anymore. I may check legacy binxi to see if I can find what they 
used to do.

-b/-v2 trip $show{'raid-basic'}, and -v5 tripped $show{'optical-basic'}.

2. Added basic inxi.metainfo.xml to close issue #312. I was 99% certain that 
when I told the issue poster he needed to do the research and work and provide 
the xml required (because I don't care) that he would not do it. And he did not 
let me down, as expected, he didn't do it. It's sad when things are that 
predictable. So I did the research for the thing I don't care about, for gui 
software installers I never use, and which have nothing to do with inxi.

3a. GRAPHICS: corrected false assumptions about what monitor resolution vs 
mode values are, which also exposed other bugs and errors in parsing for both
x11 and wayland.

3b. GRAPHICS: added --force swaymsg, wl-info, wlr-randr switches, to allow for
testing each item, or for using fake data for one of them.

3c. GRAPHICS: Rearranged some subs, and added better section comment headers
to make the logic blocks more obvious. Graphics, like CPU, is very long.

3d. GRAPHICS: Added --force no-egl, no-opengl, no-graphics-api, no-vulkan 
switches. We've found some legacy systems where eglinfo hangs.

4. main::clean_unset(): added null to cleaner.

5. DEBUG: changed minimum width for --debug-y to 50, from 80.

6a. TOOLS: pinxi/tools/gpu_raw.pl, gpu_ids.pl: Changed the Intel architecture 
names to what they use in their docs, that gives up on trying to assign them 
generation numbers after 11.

6b. TOOLS: pinxi/tools/gpu_raw.pl: changed to aadjust to possible extra columns 
in the gpu.intel.com data source, they have added 1 column to most rows, and 2 
to some, so now it just looks for anything after 5 with .*.

7. INTERNAL: switched $use{'no-ssl'} and $use{'no-man'} to $force, it was not 
consistent, just use --force for all the --no-xxx options. This goes along with
adding more force switches and shortcuts.

8. INFO: Going with enhancement 3, redid the white list regex for terminals, 
there were a bunch of [xx]tty type names.

--------------------------------------------------------------------------------
-- Harald Hope - Mon, 6 Jan 2025 12:15:07 -0700

================================================================================
Version: 3.3.36
Patch: 00
Date: 2024-09-04
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Phase 2 of the big CPU upgrade a few years back is now done, I'd left one part 
inadequate in terms of the data structures, mainly because I did not have data 
samples to test, but also because no corner cases that required a more robust 
data structure for die > cluster > core counts showed up duing the initial 
development phase. This led to somewhat predictable issues and bug reports when 
someone had a CPU that did require that structure to show correct core/die type 
data.

So while most users will see very little difference, beyond dies: and clusters:
items appearing where they did not before, the internal logic is now far more 
robust.

--------------------------------------------------------------------------------
SPECIAL THANKS:

1. CPU: Codeberg issue #307 finally helped solve the old AMD ryzen wrong core 
count issue, I believe. Thanks superkoning for the data and reporting the 
RISC-V failure to show right core counts, and to show MT when it isn't, which
was caused by same issue.

2. RECOMMENDS: Codeberg user Ricky-Tigg in issue #309 for taking the time to 
actually check --recommends output for inconsistencies. And finding them!

--------------------------------------------------------------------------------
KNOWN ISSUES:

1. The old issue #293 about AMD Ryzen 2 die CPU showing wrong core counts is 
probably fixed, but can't know until it's confirmed for that exact CPU. Fix 1a 
should handle all variants, I hope. Tested on old OS VM installs, and found most 
