Date: 08/19/09 (IT Professionals) Keywords: php I'm working on some Perl code (might get moved to PHP) which will be the basis for displaying server racks - and blade servers (blade servers, in the big picture, really are just mini-racks). The trick is, racks can be of different U heights, and blade servers could be numbered however the OEM wants (you'd /think/ horizontally, starting in the upper left). The parameters of the 'racks' will be stored in a db (ldap in this case), and I wanted the parameters to be human readable. So, I've written the following Perl code. There's testing output included, and for what this is, I don't see any need to remove it. Here's some sample output: TLV: 20 VI: -1 PriOrder: Vertical PriOrderStart: Bottom SecOrderStart: Right U_Horz: 5 U_Vert: 4 HorzInc: -4 VertInc: -1 TopLeftVal: 20 20 16 12 8 4 19 15 11 7 3 18 14 10 6 2 17 13 9 5 1 I'd /love/ to hear thoughts on optimizing (especially the large 'if' section) it. - chris
$PriOrder="Horizontal";
$PriOrderStart="Left";
$SecOrderStart="Bottom";
$U_Horz=5;
$U_Vert=4;
if ( $PriOrder eq "Horizontal" ) {
if ( $PriOrderStart eq "Left" ) {
$HorzInc=1;
if ( $SecOrderStart eq "Top" ) {
$TopLeftVal=1;
$VertInc=$U_Horz;
print "TLV: $TopLeftVal\tVI: $VertInc\n";
}
if ( $SecOrderStart eq "Bottom" ) {
$TopLeftVal=$U_Horz * ( $U_Vert - 1 ) + 1;
$VertInc=-$U_Horz;
print "TLV: $TopLeftVal\tVI: $VertInc\n";
}
}
if ( $PriOrderStart eq "Right" ) {
$HorzInc=-1;
if ( $SecOrderStart eq "Top" ) {
$TopLeftVal=$U_Horz;
$VertInc=$U_Horz;
print "TLV: $TopLeftVal\tVI: $VertInc\n";
}
if ( $SecOrderStart eq "Bottom" ) {
$TopLeftVal=$U_Horz * $U_Vert;
$VertInc=-$U_Horz;
print "TLV: $TopLeftVal\tVI: $VertInc\n";
}
}
}
if ( $PriOrder eq "Vertical" ) {
if ( $SecOrderStart eq "Left" ) {
$HorzInc=$U_Vert;
if ( $PriOrderStart eq "Top" ) {
$TopLeftVal=1;
$VertInc=1;
print "TLV: $TopLeftVal\tVI: $VertInc\n";
}
if ( $PriOrderStart eq "Bottom" ) {
$TopLeftVal=$U_Vert;
$VertInc=-1;
print "TLV: $TopLeftVal\tVI: $VertInc\n";
}
}
if ( $SecOrderStart eq "Right" ) {
$HorzInc=-$U_Vert;
if ( $PriOrderStart eq "Top" ) {
$TopLeftVal=$U_Vert * ( $U_Horz - 1 ) + 1;
$VertInc=1;
print "TLV: $TopLeftVal\tVI: $VertInc\n";
}
if ( $PriOrderStart eq "Bottom" ) {
$TopLeftVal=$U_Vert * $U_Horz;
$VertInc=-1;
print "TLV: $TopLeftVal\tVI: $VertInc\n";
}
}
}
print "PriOrder: $PriOrder\n";
print "PriOrderStart: $PriOrderStart\n";
print "SecOrderStart: $SecOrderStart\n";
print "U_Horz: $U_Horz\n";
print "U_Vert: $U_Vert\n";
print "\n";
print "HorzInc: $HorzInc\n";
print "VertInc: $VertInc\n";
print "TopLeftVal: $TopLeftVal\n\n";
for ($VertLoop = 0; $VertLoop < $U_Vert; $VertLoop++) {
$RowStart = $TopLeftVal+($VertLoop*$VertInc);
$RowEnd = $RowStart+$HorzInc*($U_Horz-1);
for ($HorzLoop = $RowStart; $HorzLoop != $RowEnd+$HorzInc; $HorzLoop+=$HorzInc) {
print "$HorzLoop\t";
}
print "\n";
}
|