226 lines
4.7 KiB
Raku
226 lines
4.7 KiB
Raku
#!perl -w
|
|
#
|
|
# A tool to create boot floppy images.
|
|
#
|
|
# Author: Milong Sabandith (milongs)
|
|
#
|
|
##############################################################################
|
|
|
|
use lib $ENV{RAZZLETOOLPATH} . "\\PostBuildScripts";
|
|
use lib $ENV{RAZZLETOOLPATH};
|
|
use PbuildEnv;
|
|
use ParseArgs;
|
|
use cksku;
|
|
use ReadSetupFiles;
|
|
use Logmsg;
|
|
|
|
sub Usage { print<<USAGE; exit(1) }
|
|
Create Boot Floppy Images.
|
|
Usage: $0 share
|
|
Example:
|
|
$0 d:\i386
|
|
|
|
USAGE
|
|
|
|
$ErrorCode = 0;
|
|
|
|
$listlength = 27;
|
|
|
|
@skulist = (
|
|
"win3.x",
|
|
"win95",
|
|
"win98",
|
|
"win98/se",
|
|
"win98/98se",
|
|
"winme",
|
|
"Win NT 3.51 Wks",
|
|
"Win NT 4.0 Wks",
|
|
"BackOffice SBS 4.x",
|
|
"Win 2k Retail Pro FPP/CPP",
|
|
"Win 2k OEM Pro FPP/CPP",
|
|
"Win 2k Select Pro",
|
|
"Win 2k MSDN Pro",
|
|
"Win 2k Eval Pro",
|
|
"SBS 2000",
|
|
"Whistler Retail Pro FPP/CPP",
|
|
"Whistler OEM Pro FPP/CPP",
|
|
"Whistler Select Pro",
|
|
"Whistler MSDN Pro",
|
|
"Whistler Eval Pro",
|
|
"Whistler Retail Pers FPP/CPP",
|
|
"Whistler OEM Pers FPP/CPP",
|
|
"Whistler Select Pers",
|
|
"Whistler MSDN Pers",
|
|
"Whistler Eval Pers",
|
|
"Bobcat SBS Whistler",
|
|
"BackOffice SBS Whistler"
|
|
);
|
|
|
|
@replist = (
|
|
"win3x#3.1#950#none#any",
|
|
"win9x#4.0#950#none#any",
|
|
"win9x#4.1#1998#none#any",
|
|
"win9x#4.1#1998#none#any",
|
|
"win9x#4.1#1998#none#any",
|
|
"win9x#4.9#3000#none#any",
|
|
"ntw#3.51#1057#none#any",
|
|
"ntw#4.0#1381#none#any",
|
|
"nts#4.0#1381#sbs#any",
|
|
"pro#5.0#2195#none#retail",
|
|
"pro#5.0#2195#none#oem",
|
|
"pro#5.0#2195#none#select",
|
|
"pro#5.0#2195#none#msdn",
|
|
"pro#5.0#2195#none#eval",
|
|
"srv#5.0#2195#sbs#retail",
|
|
"pro#5.1#2480#none#retail",
|
|
"pro#5.1#2480#none#oem",
|
|
"pro#5.1#2480#none#select",
|
|
"pro#5.1#2480#none#msdn",
|
|
"pro#5.1#2480#none#eval",
|
|
"per#5.1#2480#per#retail",
|
|
"per#5.1#2480#per#oem",
|
|
"per#5.1#2480#per#select",
|
|
"per#5.1#2480#per#msdn",
|
|
"per#5.1#2480#per#eval",
|
|
"srv#5.1#2480#sbs#retail",
|
|
"srv#5.1#2480#sbs#retail"
|
|
);
|
|
|
|
sub GetFromInf {
|
|
local( $filename, $section, $name, $num) = @_;
|
|
$retvalue = "";
|
|
|
|
open( INFFILE, "<".$filename) or die "can't open $filename: $!";
|
|
LINEG: while( <INFFILE>) {
|
|
chomp $_;
|
|
$line = lc $_;
|
|
|
|
if ($line =~ /^\[/)
|
|
{
|
|
$InSection = 0;
|
|
}
|
|
if ($line =~ /^\[$section/)
|
|
{
|
|
$InSection = 1;
|
|
next LINEG;
|
|
}
|
|
if (! $InSection)
|
|
{
|
|
next LINEG;
|
|
}
|
|
|
|
@linefields = split('=', $line);
|
|
|
|
# empty line
|
|
if ( $#linefields == -1) {
|
|
next LINEG;
|
|
}
|
|
|
|
$nameg = $linefields[0];
|
|
|
|
#print "nameg = " . $#linefields . $nameg . "\n";
|
|
if( length( $nameg) < 1)
|
|
{
|
|
next LINEG;
|
|
}
|
|
$nameg =~ s/ *$//g;
|
|
|
|
if ( not ($nameg =~ /$name/)) {
|
|
next LINEG;
|
|
}
|
|
|
|
@linefields2 = split(',', $linefields[1]);
|
|
|
|
$retvalue = $linefields2[$num];
|
|
# Remove spaces
|
|
$retvalue =~ s/ *$//g;
|
|
$retvalue =~ s/^ *//g;
|
|
if( length( $retvalue) > 0) {
|
|
last LINEG;
|
|
}
|
|
} # while (there is still data in this inputfile)
|
|
close( INFFILE);
|
|
return $retvalue;
|
|
}
|
|
|
|
sub insku{
|
|
local($testsku) = @_;
|
|
$count = 0;
|
|
while ($count < $listlength) {
|
|
#printf( "%s %s\n", $testsku, $skulist[$count]);
|
|
if ($testsku =~ /^$skulist[$count]$/ ) {
|
|
return $count+1;
|
|
}
|
|
$count = $count+1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
sub myprocess {
|
|
local($inputfile) = @_;
|
|
|
|
open(OLD, "<" . $inputfile) or die "can't open inputfile: $!";
|
|
open(NEW, ">" . $inputfile."dat") or die "can't open outputfile: $!";
|
|
|
|
# $count = 0;
|
|
#while( <@skulist>) {
|
|
#$count = $count+1;
|
|
#printf( "count %d, %s\n", $count, $_);
|
|
#}
|
|
#$listlength = $count;
|
|
$count = 0;
|
|
while( $count < $listlength) {
|
|
$skulist[$count] = lc $skulist[$count];
|
|
printf( "count %d, %s\n", $count, $skulist[$count]);
|
|
$count = $count+1;
|
|
}
|
|
printf( "length = %d\n", $listlength);
|
|
|
|
LINE1: while( <OLD> ) {
|
|
chomp $_;
|
|
$line = lc $_;
|
|
|
|
if ($line =~ /^\[/)
|
|
{
|
|
(printf NEW $line."\n");
|
|
next LINE1;
|
|
}
|
|
|
|
@linefields = split('=', $line);
|
|
|
|
# empty line
|
|
if ( $#linefields == -1) {
|
|
next LINE1;
|
|
}
|
|
|
|
$sku = $linefields[0];
|
|
$error = $linefields[1];
|
|
$result = $linefields[2];
|
|
$count = insku( $sku);
|
|
if ($count) {
|
|
#(printf "%s %s=%s,%s", $sku, $replist[$count-1], $error, $result."\n");
|
|
(printf NEW "%s=%s,%s\n", $replist[$count-1], $error, $result);
|
|
}
|
|
else {
|
|
(printf "* %s=%s,%s", $sku, $error, $result."\n");
|
|
(printf NEW "* %s=%s,%s\n", $sku, $error, $result);
|
|
}
|
|
} # while (there is still data in this inputfile)
|
|
|
|
close(OLD);
|
|
close(NEW);
|
|
}
|
|
|
|
foreach $share (@ARGV) {
|
|
#print "arg is $file\n";
|
|
#@filelist = <$file>;
|
|
#@filelist = `dir /b /a-d $file`;
|
|
foreach (@ARGV) {
|
|
chomp $share;
|
|
myprocess( $share);
|
|
}
|
|
exit($ErrorCode);
|
|
}
|
|
|