###############################################################################
# token.per
#
# Perl script for replacing a token in a text file.
#
# History:
# 04/11/96 RossW Created.
# 07/03/96 t-jackie Modified.
#
# Copyright(C) 1996. Microsoft Corporation. All rights reserved.
###############################################################################
if($ARGV[0] eq "") { &PRINTUSAGE; exit; }
%Tokens;
# Handling the switches.
while($ARGV[0] =~ /^-/)
{
$_ = shift;
/^-(v)/i && (eval "\$$1 = 1", next);
/^-t([^=]*)=([^\s]*)/i && (eval "\$Tokens{\$1} = \"\$2\"", next);
die "Unrecognized switch: $_\n";
}
$x1 = sprintf "%4.4lx", $Tokens{TOK_BUILDNUM};
$Tokens{TOK_BLDNUMSTR} = sprintf "%2s,%2s", substr($x1, 0, 2), substr($x1, 2, 2);
if($ARGV[0] eq "") { &PRINTUSAGE; die "No input file given!"; }
# Not a switch, must be the input file.
$file = $ARGV[0];
if($v) { print STDERR "\n"; }
# Handling the environment variable for external builds.
$BuildType = $ENV{'BUILDTYPE'};
# Setting flag if BUILDTYPE environment variable is not set.
if($BuildType eq "")
{
if($v) { print STDERR "BUILDTYPE environment variable not set!\n"; }
}
if($v) { print STDERR "Opening the input file: $file\n"; }
open(INPUT, "<$file") || die "Could not open $file\n";
if($v) { print STDERR "Replacing tokens.\n"; }
$omit = 0;
$linecount = 0;
while()
{
if($v)
{
if((++$linecount % 100) == 0)
{ print(STDERR "line: $linecount\n"); }
}
if($omit && !(/^\s*<\/BUILDTYPE>\s*$/)) { next; }
foreach $key (sort keys(%Tokens))
{
s/$key/$Tokens{$key}/g;
}
if(/^\s*]*)>\s*$/)
{
if($BuildType eq "") { $omit = 0; next; }
$keep = 0;
@Types = split(/,/, $1);
foreach $type (@Types)
{
if("\U$BuildType\E" eq "\U$type\E") { $keep = 1; last; }
}
if(!$keep) { $omit = 1; }
next;
}
elsif(/^\s*<\/BUILDTYPE>\s*$/)
{
$omit = 0;
next;
}
print;
}
if($omit && $v) { print STDERR "No end of INTERNAL flag!\n"; }
close(INPUT);
if($v) { print STDERR "Done!\n"; }
sub PRINTUSAGE
{
print STDERR "\ntoken.per v0.2 usage:\n";
print STDERR "\nperl token.per [-v] [-tsymbol1=value1 .. -tsymbolX=valueX] \n\n";
print STDERR " The file to replace tokens in.\n";
print STDERR " -tsymbol=value Define a new symbol value.\n";
print STDERR " -v verbose mode; default is quiet.\n";
print STDERR "\nOutput goes to STDOUT, errors to STDERR.\n";
print STDERR "\nInclusion of lines based on BUILDTYPE:\n";
print STDERR "\t1. Set the environment variable BUILDTYPE.\n";
print STDERR "\t2. In the input file put \n";
print STDERR "\t on the line before lines to be included\n";
print STDERR "\t if BUILDTYPE == type1 | type2 | .. | typeN\n";
print STDERR "\t3. In the input file put on the line after\n";
print STDERR "\t the inclusion lines.\n";
print STDERR "The BUILDTYPE lines in the input file will be removed by this program.\n\n";
}