#!/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
