- print Dump(%$oses);
-}
-
-# Plain text output (the default).
-elsif ($output eq "text") {
- output_text ();
-}
-
-# XML output.
-elsif ($output eq "xml") {
- output_xml ();
-}
-
-# Query mode.
-elsif ($output eq "query") {
- output_query ();
-}
-
-sub output_text
-{
- output_text_os ($oses->{$_}) foreach sort keys %$oses;
-}
-
-sub output_text_os
-{
- my $os = shift;
-
- print $os->{os}, " " if exists $os->{os};
- print $os->{distro}, " " if exists $os->{distro};
- print $os->{arch}, " " if exists $os->{arch};
- print $os->{major_version} if exists $os->{major_version};
- print ".", $os->{minor_version} if exists $os->{minor_version};
- print " ";
- print "on ", $os->{root_device}, ":\n";
-
- print __" Mountpoints:\n";
- my $mounts = $os->{mounts};
- foreach (sort keys %$mounts) {
- printf " %-30s %s\n", $mounts->{$_}, $_
- }
-
- print __" Filesystems:\n";
- my $filesystems = $os->{filesystems};
- foreach (sort keys %$filesystems) {
- print " $_:\n";
- print " label: $filesystems->{$_}{label}\n"
- if exists $filesystems->{$_}{label};
- print " UUID: $filesystems->{$_}{uuid}\n"
- if exists $filesystems->{$_}{uuid};
- print " type: $filesystems->{$_}{fstype}\n"
- if exists $filesystems->{$_}{fstype};
- print " content: $filesystems->{$_}{content}\n"
- if exists $filesystems->{$_}{content};
- }
-
- if (exists $os->{modprobe_aliases}) {
- my %aliases = %{$os->{modprobe_aliases}};
- my @keys = sort keys %aliases;
- if (@keys) {
- print __" Modprobe aliases:\n";
- foreach (@keys) {
- printf " %-30s %s\n", $_, $aliases{$_}->{modulename}
- }
- }
- }
-
- if (exists $os->{initrd_modules}) {
- my %modvers = %{$os->{initrd_modules}};
- my @keys = sort keys %modvers;
- if (@keys) {
- print __" Initrd modules:\n";
- foreach (@keys) {
- my @modules = @{$modvers{$_}};
- print " $_:\n";
- print " $_\n" foreach @modules;
- }
- }
- }
-
- print __" Applications:\n";
- my @apps = @{$os->{apps}};
- foreach (@apps) {
- print " $_->{name} $_->{version}\n"
- }
-
- if ($os->{kernels}) {
- print __" Kernels:\n";
- my @kernels = @{$os->{kernels}};
- foreach (@kernels) {
- print " $_->{version} ($_->{arch})\n";
- my @modules = @{$_->{modules}};
- foreach (@modules) {
- print " $_\n";
- }
- }
- }
-
- if (exists $os->{root}->{registry}) {
- print __" Windows Registry entries:\n";
- # These are just lumps of text - dump them out.
- foreach (@{$os->{root}->{registry}}) {
- print "$_\n";
- }
- }
-}
-
-sub output_xml
-{
- my $xml = new XML::Writer(DATA_MODE => 1, DATA_INDENT => 2);
-
- $xml->startTag("operatingsystems");
- output_xml_os ($oses->{$_}, $xml) foreach sort keys %$oses;
- $xml->endTag("operatingsystems");
-
- $xml->end();
-}
-
-sub output_xml_os
-{
- my ($os, $xml) = @_;
-
- $xml->startTag("operatingsystem");
-
- foreach ( [ "name" => "os" ],
- [ "distro" => "distro" ],
- [ "arch" => "arch" ],
- [ "major_version" => "major_version" ],
- [ "minor_version" => "minor_version" ],
- [ "package_format" => "package_format" ],
- [ "package_management" => "package_management" ],
- [ "root" => "root_device" ] ) {
- $xml->dataElement($_->[0], $os->{$_->[1]}) if exists $os->{$_->[1]};
- }
-
- $xml->startTag("mountpoints");
- my $mounts = $os->{mounts};
- foreach (sort keys %$mounts) {
- $xml->dataElement("mountpoint", $_, "dev" => $mounts->{$_});
- }
- $xml->endTag("mountpoints");
-
- $xml->startTag("filesystems");
- my $filesystems = $os->{filesystems};
- foreach (sort keys %$filesystems) {
- $xml->startTag("filesystem", "dev" => $_);
-
- foreach my $field ( [ "label" => "label" ],
- [ "uuid" => "uuid" ],
- [ "type" => "fstype" ],
- [ "content" => "content" ],
- [ "spec" => "spec" ] ) {
- $xml->dataElement($field->[0], $filesystems->{$_}{$field->[1]})
- if exists $filesystems->{$_}{$field->[1]};
- }