1
0
Files
irix-657m-src/irix/cmd/diskless/dl_setup
2022-09-29 17:59:04 +03:00

231 lines
4.2 KiB
Perl

#!/usr/bin/perl
#
#
# functions required by share_setup and client_setup
#
#
# Define description strings
%description = (
"CPUBOARD" => "CPU board",
"CPUARCH" => "CPU architecture",
"GFXBOARD" => "graphics board",
"SUBGR" => "graphics subgroup",
"VIDEO" => "video card",
"MODE" => "mode",
);
# Get the support architecture list from .dl_classes
sub get_arch()
{
open (IN, ".dl_classes") || die "Can't open .dl_classes: $!\n";
$i = 0;
line: while (<IN>)
{
chomp;
next line if /^#/;
next line if (!$_);
$_ =~s/\s+/:/g;
($data[$i]{CPUBOARD}, $data[$i]{CPUARCH}, $data[$i]{GFXBOARD},
$data[$i]{SUBGR}, $data[$i]{VIDEO},
$data[$i]{MODE}) = split(/:/,$_,6);
#Video is the only thing that can be tagged "NULL" in .dl_classes
if ($data[$i]{VIDEO} eq "NULL")
{
$data[$i]{VIDEO} = "";
}
$i++;
}
close IN;
return;
}
# Pick the necessary information for use
sub pick_info()
{
foreach $item ("CPUBOARD", "CPUARCH", "GFXBOARD", "SUBGR", "VIDEO", "MODE")
{
$j = 0;
$i = 0;
$there = 0;
splice(@temp,0);
for ($k = 0 ; $k < scalar@data ; $k++)
{
$l = 0;
while ($l < scalar@temp)
{
if ($data[$k]{$item} eq $temp[$l])
{
$there = 1;
}
$l++;
}
if (!$there)
{
if (defined $MODE)
{
if ($data[$k]{'MODE'} eq $MODE)
{
$temp[$j++] = $data[$k]{$item};
}
}
else
{
$temp[$j++] = $data[$k]{$item};
}
}
$there = 0;
}
$k = 1;
if (scalar@temp != 1)
{
print "Choose the $description{$item}:\n";
foreach $item (@temp)
{
if ($item eq "")
{
print "\t$k. Not installed\n";
}
else
{
print "\t$k. $item\n";
}
$k++;
}
ww: print "\nChoose one \(";
for ($k = 1 ; $k <= scalar@temp ; $k++)
{
print "$k ";
}
print "\): ";
chomp($choice = <STDIN>);
if (($choice<1)||($choice>scalar@temp))
{
print "Please choose a proper selection\n";
goto ww;
}
$itemx=$temp[$choice-1];
print ">> $itemx selected.\n";
}
else
{
$itemx=$temp[0];
}
var: while ($i<scalar@data)
{
if ($itemx ne $data[$i]{$item})
{
splice(@data,$i,1);
next var;
}
$i++;
}
if (scalar@data==1)
{
print "You have defined a client class with these components: \n";
if (!defined $MODE)
{
$CPUBOARD=$data[0]{CPUBOARD};
$CPUARCH=$data[0]{CPUARCH};
$GFXBOARD=$data[0]{GFXBOARD} . " -mSUBGR=" . $data[0]{SUBGR};
$VIDEO=$data[0]{VIDEO};
$MODE=$data[0]{MODE};
}
else
{
if (index($CPUBOARD,$data[0]{CPUBOARD})<0)
{
$CPUBOARD.=" -mCPUBOARD=" . $data[0]{CPUBOARD};
}
if (index($CPUARCH,$data[0]{CPUARCH})<0)
{
$CPUARCH.=" -mCPUARCH=" . $data[0]{CPUARCH};
}
$temp=$data[0]{GFXBOARD} . " -mSUBGR=" . $data[0]{SUBGR};
if (index($GFXBOARD,$temp)<0)
{
$GFXBOARD.=" -mGFXBOARD=" . $temp;
}
if ($VIDEO eq "")
{
$VIDEO=$data[0]{VIDEO};
}
elsif (index($VIDEO,$data[0]{VIDEO})<0)
{
$VIDEO.=" -mVIDEO=" . $data[0]{VIDEO};
}
}
print "\tCPUBOARD=$CPUBOARD\n";
print "\tCPUARCH=$CPUARCH\n";
print "\tGFXBOARD=$GFXBOARD\n";
print "\tVIDEO=$VIDEO\n";
print "\tMODE=$MODE\n";
return;
}
}
}
sub pickallxxbit()
{
#Get all xx-bit platforms from .dl_classes
#NOTE: This is only used in share_setup
my $xyz = shift(@_);
open (IN, ".dl_classes") || die "Can't open .dl_classes: $!\n";
linex: while (<IN>)
{
chomp;
next linex if /^#/;
next linex if (!$_);
$_ =~s/\s+/:/g;
($CPB,$CPA,$GFB,$SGR,$VID,$MD) = split(/:/,$_,6);
if ($VID eq "NULL")
{
$VID = "";
}
if ($MD eq $xyz)
{
#Append to old or create if new
if (!defined $MODE)
{
$CPUBOARD=$CPB;
$CPUARCH=$CPA;
$GFXBOARD=$GFB . " -mSUBGR=" . $SGR;
$VIDEO=$VID;
$MODE=$MD;
}
else
{
if (index($CPUBOARD,$CPB)<0)
{
$CPUBOARD.=" -mCPUBOARD=" . $CPB;
}
if (index($CPUARCH,$CPA)<0)
{
$CPUARCH.=" -mCPUARCH=" . $CPA;
}
$temp=$GFB . " -mSUBGR=" . $SGR;
if (index($GFXBOARD,$temp)<0)
{
$GFXBOARD.=" -mGFXBOARD=" . $temp;
}
if ($VIDEO eq "")
{
$VIDEO=$VID;
}
elsif (index($VIDEO,$VID)<0)
{
$VIDEO.=" -mVIDEO=" . $VID;
}
}
}
}
}
return 1; #Just to do it