================================================================================
Version: 3.3.19
Patch: 00
Date: 2022-06-16
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

This is a quick bug fix release, and one other fix, the bug only impact Debian/
Ubuntu distros.

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

1. Nothing new.

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

1. Two repo_builders could create an undefined array ref situation, one in Antix
I have no idea was triggered since it requires an apt file be not readable but 
existing, which just isn't a normal debian/ubuntu situation. Void linux was the
other. Since those were the only two with a -r file test, there must be some 
case where the file was not readable, though I have no idea what that case might
be.

Further examination showed this can hit all apt based systems, the cause is no
/etc/apt/sources.list file, which is a possible scenario across all apt systems.

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

1. Blacklisted all apcitz sensors that are not acpitz-virtual, which is the cpu
temp. This may help resolve issues for some users where for example using 
acpitz-acpi, which is not the cpu sensor.

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

1. A few more AMD family F empirical IDs made.

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

1. None.

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

1. Started to split/merge inxi-data.txt and inxi-resources.txt into topic 
specific files, like inxi-sensors.txt, inxi-graphics.txt, etc. inxi-values and
inxi-resources have just gotten too big over the years.

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

1. Corrected in RepoItem possible use of undefined array references.

2. Finally, a full releawse tool!! inxi-perl/tools/release.pl. Validates man,
verifies pinxi commands to avoid errors, then updates man/options/changelog 
html pages for smxi.org/docs, and then syncs pinxi* files to inxi*.

--------------------------------------------------------------------------------
-- Harald Hope - Mon, 16 Jun 2022 15:43:00 -0700

================================================================================
Version: 3.3.18
Patch: 00
Date: 2022-06-13
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bug release, replace 3.3.17 asap, most users will not experience the bug, but if 
they do, inxi stops right before the -D line. Failed to do an if defined test on 
an array ref that could be undefined or an array ref. That makes Perl very 
unhappy!

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

1. AMD family F, K8 series, will need more granular treatments to get the data 
to be more accurate and less generic. We got 2 IDs nailed from raw visual data 
confirmations and cpuid values, which leaves many, but good start. We will chip 
away (pardon the pun) at these more ambiguous IDs over time, but don't need to 
get them all done instantly, just eventually. Thanks slackware person linuxdaddy 
for doing really good research and actually looking at the cpu to find dates 
etc.

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

1. Bug, fatal, caused by internal hash/array ref refactor of 3.3.17. Thanks 
alaymari github issue #271 for reporting this one.

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

1. None except for code fixes to try to avoid the cause of the bug in Bugs 1.

2. Fixed nvidia eol try --gpu, it was showing backwards, with --gpu, not 
without, sigh.

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

1. Added slimski dm data. That's a new fork of SLiM. Also guessing that brzdm
has same version -v output: brzdm version x.xx

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

1. None

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

1. Refactors of core docs, ongoing, but will list those next release.

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

1. Cleaned up some array ref handling in subs, returned as: ($var1,$var2) = 
@{block_data(...)}, skipped initializing and creating scalar to hold the ref, 
just use it directly for DiskItem::block_data(). 

2. Also switched to local ref scalar array in DiskItem::scsi_data(), 
DiskItem::block_data(). Not set local array, set local array ref, to keep it 
clear. Also made DriveItem::drive_speed() return straight ref, not array then
ref. Same for many other subs, switched to ref assignment so it's the same ref
all through all the sub and return.

3. Fixed a redundant return \@$data to simply assigning to @$data ref, no return 
needed, in DiskItem::smartctl_data().

4. Tightened some returns of ref so that tests if good test @$ref, not $ref.
Trying to avoid more cases like issue #271.

5. Going along with array ref local/return, switched all hash refs to local hash
ref returning ref, and working local with ref. More efficient, avoids creating 
new refs over and over, dugh. This made a particularly large difference in CPU 
because in certain parts, new references were being created over and over, and 
subs were returning like \@arr or \%hash instead of declaring to start:
my $arr = []; my $hash = {};

Then working with the data from there on as an array or hash reference, to the 
same original reference, rather than creating new ones over and over, which Perl
then has to track til they expire.

--------------------------------------------------------------------------------
-- Harald Hope - Mon, 13 Jun 2022 11:22:20 -0700

================================================================================
Version: 3.3.17
Patch: 01
Date: 2022-06-10
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Rollout of advanced microarchitecture info continues, added AMD/Intel gfx 
devices, CPU built dates, process nodes, generation (in some cases, where it 
makes sense), etc.

Please note: the 3.3.16 > 17 releases require manual matching table updates. If 
you think disk or ram vendor, CPU or GPU process, release date, generation, etc, 
information is not correct: 

* FIRST: do the research, confirm it's wrong, using wikichips, techpowerup, 
wikipedia links, but also be aware, sometimes these slightly contradict each-
other, so research. Don't make me do all your work for you.

* Show the relevant data, like cpu model/stepping, to correct the issue, or 
model name string.

* There are 4 main manually updated matching tables, which use either raw regex 
to generate the match based on the model name (ram, disk vendors), or vendor id 
matching (ram vendors), product id matching (gpu data), or cpu family / model / 
stepping id matching. Each of these has its own matching tool at: 
  inxi-perl/tools/[tool-name].pl 
which is used to generate either raw data used by the functions (ids for gpu 
data), or which contains the master copy of the function used to generate the 
regex matches (cp_cpu_arch/set_ram_vendors/set_disk_vendors).

* Please use pinxi and inxi-perl branch for this data, inxi is only released 
when next stable is done, all development is done in inxi-perl branch. All 
development for the data or functions these tools are made for occurs in the 
tools, not in pinxi, and those results are moved into pinxi from the tools.

* Saying something "doesn't work" is not helpful, provide the required data for 
the feature that needs updating, or ideally, find the correct answer yourself 
and do the research and then provide the updated data for matching.

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

1. GPU/CPU process node sizes are marketing, not engineering, terms, but 
work-around is to list the fab too so you at least know which set of marketing 
terms you're dealing with. As of around 7nm, most of the fabs are not using nm 
in their names anymore, TSMC is using n7, Intel 7, for example. While these 
marketing terms do reflect changes from the previous process node, more 
efficient, faster, faster per watt, and so on, and these changes are often quite 
significant, 10-30%, or more, they do not reflect the size of the transistor 
gate like they used to up until about 350nm. Intel will move to A20 for the node 
after 4 or 5, 2nm, meaning 20 angstroms.

Intel suggested million transistors per mm^2 as an objective measure (currently 
around 300+ million!! as of ~7nm), but TSMC didn't take them up on it.

GlobalFoundries (GF) stepped away from these ultra small processes at around 
14nm, so you won't see GF very often in the data. AMD spun off its chip fabs to 
GF aound 2009, so you don't see AMD as foundry after GF was formed. ATI always 
used TSMC so GPU data for AMD/ATI is I think all TSMC. Intel has always been its 
own foundry.

2. Wayland drops all its data and can't be detected if sudo or su is used to run 
inxi. That's unfortunate, but goes along with their dropping support for > 1 
user, which was one of the points of wayland, same reason you can do desktop 
sharing or ssh desktop forwarding etc. This means inxi doesn't show wayland as 
Display protocol, it is just blank, if you use su, or sudo start. This makes 
some internal inxi wayland triggers then fail. Still looking to see if there is 
a fix or workaround for this.

3. In sensors, a new syntax for k10-pci temp, Tctl, which unfortunately is the
only temp type present for AMD family 17h (zen) and newer cpus, but that is not
an actual cpu temp, it's:
https://www.kernel.org/doc/html/v5.12/hwmon/k10temp.html

"Tctl is the processor temperature control value, used by the platform to 
control cooling systems. Tctl is a non-physical temperature on an arbitrary 
scale measured in degrees. It does _not_ represent an actual physical 
temperature like die or case temperature."

Even worse, it replaced Tdie, which was, correctly, temp1_input, and, somewhat
insanely, the non real cpu temp is now temp1_input, and if present, the real
Tdie cpu temp is temp2_input. I don't know how to work around this problem.

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

1. Fallback test for Intel cpu arch was not doing anything, used wrong variable
name.

2. A very old bug, thanks mrmazda for spotting this one, runlevel in case of 
init 3 > init 5 showed 35, not 5. Doesn't show on systemd stuff often since it
doesn't use runlevels in this way, but this bug has been around a really long
time. 

3. SensorItem::gpu_data was always logging its data, missing the if $b_log.

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

1. Fixed some disk vendor detection rules.

2. Failing to return default target for systemd/systemctl when no:
 /etc/systemd/system/default.target
file exists. Corrected to use systemctl get-default as fallback if file doesn't
exist.

3. Fixed indentation for default: runlevel, should be child of runlevel: / 
target:

4. Fixed corner case where systemd has no /proc/1/comm file but is still the
init system. Added fallback check for /run/systemd/units, if that exists, safe
to assume systemd is running init.

5. Fixed subtle case, -h/--recommends/--version/--version-short should not print 
to -y1 width, but rather to the original or modified widths >= 80 cols. 
Corrected this in print_basic() by using max-cols-basic.

6. Forgot to add --pkg, --edid, and --gpu to debugger run_self() tool.

7. Fixed broken sandisk vendor id.

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

1. Added AMD and Intel GPU microarchitecture detections for -Gx. These are not 
as easy as Nvidia because there is no one reliable data source for product ids.

2. Going with the -Ga process: .. built: item, -Ca will show process: [node] and 
built: years and sometimes gen: if available. Geeky, sure, not always perfect, 
or correct, but will generally be close. Due to difficultly in finding reliable 
release > build end years for example, not all cpus have all this data.

Using CPU generation,where that data is available and makes sense. Like AMD 
Zen+ is zen gen: 2, for example,. Because Intel microarch names are often 
marketing driven, not engineering, it's too difficult to assign gen consistently 
based only on model names. Shows for Core intels like: gen: core 3

That will cover most consumer Intel CPU users currently. 

3. Added initial Zen 3+ and Zen 4 ids for cp_cpu_arch(). There is very little 
info on these yet, so I'm going on what may prove to be incomplete or wrong 
data.

4. Added GPU process, build years for -Ga.

5. Added fallback test for gpus that we don't have product IDs for yet because
dbs have not been updated. Only used for cases where it's the newest gpu series
and no prodoct IDs have been found.

6. Added AMD am386 support to cp_cpu_arch... ok ok, inxi takes 9 minutes to 
execute on that, but there you have it.

7. Added unverified Hyprland wayland compositor detection.

8. By request, added --version-short/--vs, which outputs version info in one 
line if used together with other options and if not short form. With any normal
line option, will output version (date) info first line, without any other 
option, will output 1 line version info and exit.

9. More disk vendors, ids! Much easier with new tool disk_vendors.pl.

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

1. Deprecated --nvidia/--nv in favor of more consistent --gpu, that's easier to
work with multiple vendors for advanced gpu architecture. Note for non nvidia,
--gpu only adds codename, if available and different from arch name. For nvidia,
it adds a lot more data.

2. Changed inxi-perl/tools tool names to more clearly reflect what function they
serve.

3. Going with runlevel fixes, changed 'runlevel:' to be 'target:' if systemd.
Also changed incorrect 'target:' for 'default:'.

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

1. Updated man, help, docs/inxi-data.txt for new gpu data and tools, and to 
indicate switch to more generic --gpu trigger for advanced gpu data, instead of
the now deprecated --nvidia/--nv, which probably will go down as the shortest 
lasting option documented, though of course inxi always keeps legacy syntax 
working, behind the scenes, it's just removed from the -h and man page in favor
of --gpu. Also updated to show AMD/Intel/Nvidia now, since the data now roughly
works for all three main gpus.

2. Updated pinxi README.txt to reflect the tools and how to use them and what
they are for.

3. --help, man, updated for target/runlevel, default: changes for init data.

4. Updated configuration html and man for --fake-data-dir.

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

1. Upgraded tools/gpu_ids.pl to handle nvidia, intel, or amd data, added data 
files in tools/lists/ for amd. First changed name from ids.pl to gpu_ids.pl

2. New data files added for amd/intel pci ids, and a new tool to merge them and 
prep them for gpu_ids.pl -j amd|intel handling. All work. Took a while to get 
these things sorted, but don't want to get stuck in future with manual updates, 
it needs to be automated as much as possible, same as with disk_vendors.pl etc, 
if I'm going to try to maintain this over time.

3. Made all gpu data file names use consistent formats, and made disk data files 
also follow this format. 

4. Changed raw_ids.pl to gpu_raw.pl, trying to keep things easy to remember and
consistent here.

5. Refactored core gpu data logic, now all types use the same sub, and just
assign various data depending on the type.

6. Changed vendors.pl name to disk_vendors.pl

7. Big redo of array/hash handling in OutputHandler, was partially by reference, 
now is completely by reference. All Items now use and return $rows array ref as 
well, from start to finish, unlike previously, where @rows was copied 
repeatedly.

8. Going along with 7, made most internal passing of hash/arrays use hash/array
references instead, where it makes sense, and doesn't make the code harder to
work with.

9. Refactored WeatherItem, split apart the parts from output to be more like
normal Items in terms of error handling etc.

10. Added 'ref' return option for reader() and grabber(). Only useful for very
large data sets, added also default 'arr' if no value is provided for that
argument.

11. Switched some features to use grabber/reader by ref on the off chance that
will dump some execution time.

12. A few places added qr/.../ precompiled regex, in simple form, for loops,
maybe it helps a little. I don't know.

13. Added global $fake_data_dir, this can be changed via configuration item:
FAKE_DATA_DIR or one time by --fake-data-dir.

14. Created data directory, and initial data items. cpu is the fake data used to 
test CPU info. More will be added as data is checked and sanitized.

--------------------------------------------------------------------------------
-- Harald Hope - Fri, 10 June 2022 13:05:17 -0700

================================================================================
Version: 3.3.16
Patch: 00
Date: 2022-05-19
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

A nice release, some good corner case bug and glitch fixes, along with some much
needed documentation fixes to bring inxi-values.txt up to date for changes that
have been evolving steadily. And a useful option for nvidia legacy card info.

I'm hoping that will help support people and users as nvidia open source driver
gets more usable in the future, since that will never support legacy cards, only
the current series supported by 510/515 drivers.

Also, in inxi-perl/tools, new tools and data so you can reproduce certain arcane
data assembly features like disk vendors and nvidia product ids.

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

1. Not known yet if you can get Wayland display drivers along with kernel gpu
drivers. In other words, is a similar use of kernel/display driver as in Xorg
found with Wayland? Hard to dig up actual answers to questions like this.

2. Similarly, unknown if it's possible to get current active xorg display 
driver, not just the list from Xorg.0.log file. No idea how to discover that,
there are cases where past use of Xorg leaves log file present, but drivers are
not used with Wayland, leading to confusing driver reports. Issues 1 and 2 are 
similar but probably have similar solutions.

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

1. Very subtle failure caused by odd mount point in partitions: a too loose 
regex rule designed to capture spaces in device names was running loose to the 
end of the string, where it was triggered by a number in the mount point. 

Fix was to make rule much more strict, now needs to match 3 number space in a 
row after the initial part, and then a number%

2. Bug in corner case, with Monitors, if > 2 connected monitors, and 1 disabled,
inxi was trying to test numeric position values for the disabled monitor, which
with xrandr, has no position values, thus tripping undefined pos-x and pos-y 
errors. Thanks to fourtysixandtwo for spotting this corner case.

3. Bug in wan IP, if dig failed, set_dowloader() is not set unless other 
parameters were used, which results in failing to set parameters for downloader,
which leads to screen errors spraying out. Thanks to Manjaro user exaveal for 
posting this issue, with error outputs, which helped pinpoint the cause.

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

1. More absurd xorg port ID variations: DP-1 kernel, DP1-1 X driver. Wny? 
Trying to add in XX-?\d+-\d+ variation, which I think will be safe, made the 
first - optional, though it's just idiotic for this amount of randomness to be
allowed to exist in the 21st century. If this reflects other discipline failures
in Xorg, it starts to get somewhat more obvious why Wayland was considered as
the only forward path, though that's just as chaotic and disorganized... but in
different ways.

2. Removed darwin distro version detection, which of course broke, and using
standard fallback for BSD made out of uname array bits. If it works, it works,
if not, who cares. This should handle issue #267 hopefully.

3. Trying for more monitor matches, now in cases where 1 monitor display ID
remained unmatched, and 1 sys kms id remains unused, assume the remaining 
nonitor ID is a match and overwrite the unmatched message for that ID. This
will cover basically all single monitor match failure cases, and many multi
monitor failures with only 1 out of x monitor ids unmatched. While guessing a 
bit, it's not a bad guess, and will slightly expand the number of matched
monitor ids. This extends the previous guess where if single monitor and 
unmatched, use it to cover > 1 monitors, with 1 unmatched.

4. LINES_MAX configuration item did not assign to right variable when -1 value.
Used non-existing $size{'output-block'} instead of correct $use{'output-block'}

5. Forgot to add pkg to --force, goes with --pkg.

6. Finally! Added in busybox shell detection, it's not of course reliable if 
they change internal light shells, but all the docs say they use ash, so now
it will show shell: ash (busybox) to make it clear. Hurray!! This means that
tinycore users will get this long awaited feature! Ok, ok, long awaited by 
probably only me, but since I package inxi for TinyCore, it was on my todo list.

7. Cleaned up and re-organized many disk vendor matching rules, made them easier
to read and debug, going along with Code 3, vendors.pl development and release.

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

1. New feature: in -Ga, if Nvidia card, shows last supported nvidia legacy 
series driver (like 304.xx), status, microarch. If --nvidia and EOL, shows 
last-supported: kernel: xorg: info. This should be useful for support people, 
we'll see.

-Gx shows nvidia microarchitecture, if it was found. This is based on matching
tables so will go out of date if you have non current inxi's, but that's life.

If --nvidia or --nv shortcut is used instead, triggers -Ga and shows much more 
nvidia driver data for legacy, and for EOL drivers, last supported kernel, xorg, 
and last release version. --nvidia also adds process node if available.

More important perhaps is the fact that as of May 2022, nvidia is starting the 
process of open sourcing its current latest driver (515, but Turing, Ampere 
architectures only so far), which will only support non legacy nvidia cards, 
making detection of legacy cards even more important to support people and end 
users, since that will be a common question support people will have: does my 
card support the open source driver?"

Read about the new open sourcing of the 515 nvidia module:
https://developer.nvidia.com/blog/nvidia-releases-open-source-gpu-kernel-modules/
https://github.com/NVIDIA/open-gpu-kernel-modules
https://www.phoronix.com/scan.php?page=article&item=nvidia-open-kernel&num=1

2. Going along with new and upgraded tools in Code 3, massive, huge, upgrade to
disk vendors, 100s of new matches, biggest upgrade ever for disk vendors. This
feature should work much better now with the new backend tools.

3. Added shortcuts: --mm for --memory-modules, --ms for --memory-short.

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

1. None.

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

1. Big update to docs/inxi-values.txt. This had gotten really out of date, with
incorrect hash and other internal data assignments, all updated to be current,
along with sample greps to make it easier to locate changes in the future as 
well. This makes this document fairly up to date and useful again for dev 
reference purposes, should such a dev ever appear, lol. Many values had not
been updated after global refactors, like switching to the %risc data for all
arm/mips/ppc platform types, and making %load, %use, %force, %fake uses more
consistent. Doing this helped expose some subtle bugs and failure cases in
inxi as well.

2. Added to -h and man -Ga Nvidia option info. Fixed some typos and glitches. 
Includes new --nvidia / --nv options for full data.

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

1. Changed $dl{'no-ssl-opt'} to $use{'no-ssl'} and $dl{'no-ssl'}, that was a 
confusing inconsistency.

2. Added comma separated list of --dbg numbers, since often > 1 is used. Saves
some debugging time, otherwise nothing changes.

3. Huge new public release of some back end tools in new section: 
inxi-perl/tools
* vendors.pl - disk vendors tool, with data in lists/disks*.txt
* ids.pl - nvidia product id generator tool, with data in lists/nv_*

4. While doing vendors.pl, I noticed that the use of array ref for $vendors was
not done correctly, that's fixed now, simplifies it slightly.

--------------------------------------------------------------------------------
-- Harald Hope - Thu, 19 May 2022 13:02:00 -0700

================================================================================
Version: 3.3.15
Patch: 00
Date: 2022-04-08
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Bug fix, it's a bad edid data bug, rare, but when it trips, kills inxi execution 
dead right before -G/Graphics shows. Also some nice fixes and enhancements.

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

1. Possible case of Gnome Wayland failing to set any gnome environmental 
variables, making wayland detection not possible. This was in anonymous dataset 
inxi-proBook4540s dataset. Person never appeared in real life so can't follow up 
on it. This cascaded down to other failures in display detection, and desktop 
detection, though in theory much of the data needed was present. I expect 
similar issues may appear with kde wayland. This is/was probably a configuration 
or build error I believe, though not enough data yet.

It appears that sudo start disabled the display environmental variable 
detections, which is unfortunate, and the fallback loginctl tests do not appear
to work for unknown reasons. I've confirmed this on Fedora stock Gnome as well.

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

1. Forgot to test that return from get_display_manager is array ref, this 
impacts only a tiny handful of distros probably, TinyCore was one, but it is a 
fatal failure, so fixed it. Never trips in console, only on tiny linux where no 
dm is used at all. Tripped with Xvesa, seen other bug reports, but not enough
data to know for sure.

[2022-04-09 update] It turns out that basically when $DISPLAY is set, but no DM
detected, for example starting wayland sway from tty, the issue also appeared.
See Debian issue:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1009089
inxi currently has no way to detect a tty start of a wayland compositor, or of
xvesa, so this was an entire class of bug, corrected, but not actually handled.
Ideally inxi could detect a tty compositor start, though technically showing
dm: N/A is correct since there is none running, but dm: tty-start would be nicer
since it would be more informative. But do not know how to do that yet.

2. EDID errors and warnings had several bugs, errors a fatal critical bug which
made execution stop. Had forgotten to pass the $edid hash reference to the error
constructor. Also had used wrong hash key in output so would never have shown.

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

1. Corrected ram device indentation levels.

2. Made memory width more clear with: width: data: total: which more
accurately reflects the source data. Also in cases where no data or total 
values, only show width: N/A, not the data: total: sub items.

3. Made edid errors/warnings output to numbered list of warnings/errors instead
of using join() to made one long list. Much more consistent that way. This fixes
issue #266 - thanks SheridanOAI for finding this bug.

4. In --slots, -x wasn't loading the bus ID so it showed N/A, unnecessary data 
collection granularity, removed.

5. For Display, if no X or gpu driver, show: driver: N/A. Showed driver: gpu: 
N/A before.

6. For Display, remove filters for Xwayland tests, we always want to see 
xwayland data if it's installed. This was actually an error to not show it since 
display_server_data already had the correct tests to not redo Xorg data if found 
previously, which would be glxinfo based data. This is a partial fix also for 
Known Issue 1, at least we'll see Xwayland is present even if Wayland detections
failed for unkonwn reasons.

7. Added some ram value dmi filters, found some that had 'none' or 'unknown'.

8. Show display protocol out of display!! Also handles most common root use 
cases as well, so in most cases, if the initial protocol detections failed, this
will result in a decent attempt, though if root it is less reliable. sudo or 
regular user will be fine since looks for not tty/pts TTY type and username.

This should also help narrow down Known Issue 1 failures, though there are more
cases to be dealt with, but can only chip away since not enough data.

9. Made info: item in slots more robust, and able to handle more diverse 
scenarios.

10. Added alternate syntaxes for dmidecode permissions errors.

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

1. Added brzdm clogin mlogind xlogin display managers. Not verified. Version for
brzdm is probably like slim since brzdm is a fork of slim.

2. Added voltages to ram module report, that had been left out. Note that it's 
common for voltages to be either 'unknown' or not present at all. This is as 
close as inxi can get to handling issue #265 since there is no other source for 
the requested data type (show DDR3L, low voltage DDR3, which doesn't exist as a 
type in dmidecode).

3. Added voltages to --slots report, --slots -xx. Only shows if present.

4. Added for --slots -a for Linux, if detected, the PCI children of the bus ID 
of the slot. This is recursive, so supports as many levels as are present, 
though it would be rare for there to be more than one level of children.

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

1. In -m ram report, moved ram type before size/speed/voltage, that makes more 
sense.

2. Also in -m ram report, make type: the default value (was an -x options 
before), which contains the no module found messages etc, making the order:
  Device-1: DIMM 0 type: no module installed
  Device-2: DIMM 1 type: DDR4 size: 16 GiB speed: 2400 MT/s
  
This puts all the speed/size/voltage data together, and stops putting the no 
module found message in speed, which never made any sense.

2. In -m, changed width data to more clearly reflect the data source:
      width (bits):
        data: 64
        total: 72

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

1. Man page, added a TABLE OF CONTENTS section which lists all the primary 
sections. Can help since the man page has gotten so darned long and man doesn't
as far as I know support clickable internal links, sadly.

2. For -m, updated for revised output syntax and -x levels. Note that the help
and man actually had the type: as default for -m, not -mx, but for some reason,
the code had it wrong. Oops.

3. For -m, fixed some legacy output syntax in the examples.

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

1. Some refactors of slots, ram, as well as a bit more refactoring of edid stuff
for graphics. 

2. Added $ENV{'DISPLAY'} to debugger data collector, no idea why that was left 
out.

--------------------------------------------------------------------------------
-- Harald Hope - Thu, 8 April 2022 22:46:26 -0700

================================================================================
Version: 3.3.14
Patch: 00
Date: 2022-03-24
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

New version, man. Continuing development of EDID and monitor features, bug 
fixes, normal fixes. 

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

1. Failed to handle case for monitor positions of array type: 2-2, 3-1, 1-3, 
4-4. I'm not sure what structure those are really arranged in, but might be 
worth adding in the x+y pos values along with the row-col values.

2. For Monitors and graphics Device ports, if using non free nvidia driver and:
nvidia-drm.modeset=1 not set in grub kernel boot parameters, there will be no
/sys/class/drm data for the nvidia device, and thus no ports data, and no 
monitor data. 

3. A class of high count DP or DVI port IDs are changed by Xorg drivers to for
example: DP-6 > DP-2-3. This is very difficult to handle and will in general 
probably fail unfortunately because that level of port ID abstraction is just
reazlly hard to deal with dynamically.

4. A to-do item: add bus ID children on --slots. This will probablby be in next 
inxi.

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

1. None outside of the various fixes.

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

1. In sensors, failed to pull out BAT sensor data. In most cases, this would not
lead to any issues, but it could have.

2. This one just slipped my mind, I'd meant to do it, but in Montitor-x:, the
primary ID should have been the 'real' kernel ID, not the mapped: ID, which is 
the X.org ID when different from the kernel ID. So mapped should be the Xorg 
version when they are different from the kernel version.

3. In Graphics, monitors can show > 1 ratio, failed to set all to :, resulting
in: ratio: 3:2 or 16/10 modes:. Also fixed ParseEDID to output an array of 
ratios, which can then be processed as wanted.

4. Monitor map fixes:
* Handle case in monitors where display ID: eDP and sys ID: eDP-1, this only 
works if 1 monitor in array. There's a variety of this type of failure, when 
X.org or its drivers decide to call the port ID XYZ with no number at all. All 
those possible cases are now handled, like eDP > eDP-1, VGA > VGA-1, and so on.

* Added fallback, if no match, and if only 1 monitor, just map them to eachother
if other mappings failed. Prompted by things like: s: DP-6 > d: DP-2-3; 
s: eDP-1 > d: DP-4, which are just impossible to create logic to map.

5. Removed 'ati' driver from xorg drivers list, it's simply a wrapper for r128, 
mach64, or radeon (and maybe amdgpu), and shows as failed, unloaded, or loaded, 
because of this. ati basically assigns the correct driver, that is, but is not 
itself a driver. Thanks mrmazda for spotting this issue.

6. Typo on QDI => Quantum Data.

7. Added fallback for monitor model, now using vendor code plus product code 
if nothing found for vendor nice name or model. This will show as 'model-id:'
instead of model: to help differentiate the two.

8. Added Monitor product_code to manufacturer if no model name is found.

9. get_pci_vendor was trimming at ' / ' if the product string also contained 
' / '. Fix is to ignore 1 character 'words' in the logic.

10. In Slots, failed to remove_duplicates in the slot info field, leading to 
redundant output strings. See Enhancement 3 and Code 4.

11. See Change 3, finally made -S section use full key: value pair, which makes
stuff more explicit, like:

System:
  Host: yawn
  Kernel: 5.16.0-11.1-liquorix-amd64
    arch: x86_64
    bits: 64
    compiler: gcc
      v: 11.2.0
  Desktop: Xfce
    v: 4.16.0
    tk: Gtk
      v: 3.24.24
    info: xfce4-panel
    wm: xfwm
      v: 4.16.1
    vt: 7
    dm:
      1: LightDM
        v: 1.26.0
      2: SDDM
        note: stopped
  Distro: Debian GNU/Linux bookworm/sid

12. Fix for mageia and lsb distro data, force use of os-release for mageia if
detected. That overrides the forced use of lsb release for mandrake/mandriva,
because for some reason mageia has decided to carry ALL the legacy distro files:
'/etc/lsb-release',
'/etc/lsb-release.d',
'/etc/mageia-release',
'/etc/mandrake-release',
'/etc/mandrakelinux-release',
'/etc/mandriva-release',
'/etc/os-release',
'/etc/redhat-release',
'/etc/system-release'
which is really not what this stuff is intended for, if it's an actual derived 
distro from a living base, then yes, include the base file, but all these have
the same distro id data for mageia, none for the derived distros.

Also, fixed an lsb release thing to avoid using codename if codename contains 
release number as well. Since lsb_release is totally legacy at this point, who
cares if we might miss a specific codename here and there on legacy system.

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

1. Added Color Characteristics to EDID parser, for some reason that had been 
left out. 

2. Added advanced EDID output option --edid, that allows for showing more 
advanced EDID data than is appropriate for most users cases. Ihcludes errors,
color characteristics chroma: (chromacity), full modes, not just min/max.

3. In --slots, added bus-ID. 

Also extended report quality, made more granular, got rid of single blob from
Type and Designation and now get more accurate and useful data. 

4. In cases with > 1 DM, check to see if one or more are stopped or disabled, =
and add (stopped) if it was detected in running service as stopped.

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

1. Reversed monitor ID and mapped: ID values, that was a mistake, the mapped: 
item was supposed to contain the X.org mapped name, and the primary ID was 
supposed to be the actual real ID the kernel uses. Not a huge deal either way,
but there it is.

2. Include disabled but connected Monitors. This works around nvidia bug showing
monitors disabled when they are enabled, but also allows for showing connected 
monitors, though without as much data.

3. Made the last holdout -S > -Sa use strict full key: value pair output, like
Desktop: XFCE v: 4.14.12 and so on.

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

1. Added help/man for --edid info.

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

1. In ParseEDID: made new key: edid_error, which contains an array ref of 1 or
more edid errors. The previous version did a poor job and returned only the 
first error found, so there could have been > 1 error, and you'd never know it.

This changes check_parsed_edid to _check_parsed_edid(). and adds a utility tool
_edid_error, which grabs the message from main::message, giving better output 
integration.

This also allows for future error handling expansion quite easily.

2. In map_monitor_ids() fixed matching pattern, made more robust and explicit,
to catch things like s: eDP-1 d: eDP or eDP-1-1, both have been seen. Also added
fallback for single monitor, just map them to eachother if mapping failed.

3. get_pci_vendor() added test for using anything that is 1 character length,
to not break on 1 character length string matches.

4. Fully refactored --slots, that was originally written purely as a proof of
concept in terms of adding a new feature during the original inxi 2.9 rewrite,
and was never actually touched after that.

5. Added option to reader() to return array ref, if expecting a large file can
be useful.

--------------------------------------------------------------------------------
-- Harald Hope - Thu, 24 Mar 2022 12:01:50 -0800

================================================================================
Version: 3.3.13
Patch: 00
Date: 2022-02-22
--------------------------------------------------------------------------------
RELEASE NOTES:
--------------------------------------------------------------------------------

Just as 3.3.10 > 3.3.11 were a huge set of CPU upgrades, including significant 
internal refactors, so too is 3.3.13 a significant Graphics upgrade, featuring 
significant upgrades to Wayland (and Xvesa/TinyX!) support, and allowing for 
much more granular output controls. The legacy -Ga showing 
Display/Screen/Monitors is now split apart, and can now work for some features 
in and out of display.

This upgrade should be of significant interest to any Wayland using distro, as
well as the tiny Xvesa based distros like TinyCore, Slitaz, and Puppy.

--------------------------------------------------------------------------------
NOTE TO MAINTAINERS AND PACKAGERS:

If you had Cpanel::JSON::XS or JSON::XS Perl modules as dependencies, you can 
remove those, inxi now can use JSON::PP, which is in Core Modules since Perl 
5.14 (unless for some reason your distro removed that module from Core Modules).

Basically inxi will simply look for whichever of the 3 is installed, and use 
that one. 

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

1. The free drivers for xorg like amdgpu, modesetting, alter the the internal 
kernel IDs for monitors/gfx device ports, which is somewhat bizarre since the 
ideal role of any ID is to be an identifier that always works. Due to this 
situation, inxi has to map the kernel ids to the x driver monitor IDs in order
to show the advanced monitor data, like model: mapped: and modes:. This may not
always work as expected since if the mapping fails, the data will fail to match
to the monitors. While not enough data is in to make any conclusions, hoping 
that this issue does not exist on Wayland compositors.

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

1. Not sure if this was a bug, but I believe RAM vendor ID matches would never
have generated results, and might have generated errors. That's corrected as 
part of Code fix 1.

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

1. Tiny indentation level issue, for -Ga, Monitor was not set to be a container 
for its data. This would only impact -y 1 or json and xml output cases, and would 
be subtle, but it was an oversight.

2. Small fix for monitor dimensions, failed to switch the mm dimensions for 
monitors placed in a vertical, portait mode, instead of standard landscape mode.
Now switches mm x and y if that is detected, which corrects dpi as well.

3. For Xvesa:

* Show vesa as display driver, Xvesa == vesa, dugh,lol.

* Show better Interface and Screen resolution data missing messages.

* See FIX 5 for adding in display-ID:.

* Show TinX Xvesa string for server data, not just Xvesa.

4. For Wayland, which currently has no EGL support in inxi, if no glxinfo 
present, show EGL Wayland specific Messsage: for advanced EGL data, not the 
generic glxinfo that were shown previously.

5. Display was relying on xdpyinfo or a Wayland environmental variable to set
display-ID:, now falls back always to $ENV{DISPLAY} if nothing else was found 
and that exists. I hadn't realized how much was depending on those x tools, 
which many people never had installed in the first place. This also supplies
that for Xvesa as well, which has features that need the Display-ID to use.

6. Intel family 6, model 17h, supposed to be yorkfield, was penryn, fixed.

7. Small fix for remove_duplicates, it was not case insensitive so missed things
like DELL Dell in strings.

8. Failed to detect or get Xfree86 X server version number.

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

1. Extensive Graphics Upgrades:

