You've already forked smb-decomp
mirror of
https://github.com/encounter/smb-decomp.git
synced 2026-03-30 11:38:28 -07:00
88 lines
1.9 KiB
Raku
Executable File
88 lines
1.9 KiB
Raku
Executable File
#!/usr/bin/env perl
|
|
|
|
my $line;
|
|
my $gotLabel = 0;
|
|
my $gotEndif = 0;
|
|
my $offset = 0;
|
|
|
|
my @b = ();
|
|
|
|
sub float {
|
|
my $val = unpack "f", pack "L", ($_[0]<<24) | ($_[1]<<16) | ($_[2]<<8) | ($_[3]);
|
|
my $str = sprintf("%.10g", $val);
|
|
if ($str !~ /\./) {
|
|
$str = $str . '.0';
|
|
}
|
|
return $str . 'f';
|
|
}
|
|
|
|
sub u32 {
|
|
my $val = ($_[0]<<24) | ($_[1]<<16) | ($_[2]<<8) | ($_[3]);
|
|
return sprintf("%i", $val);
|
|
}
|
|
|
|
sub u16 {
|
|
my $val = ($_[0]<<8) | ($_[1]);
|
|
return sprintf("%i", $val);
|
|
}
|
|
|
|
while ($line = <>) {
|
|
if ($line =~ /lbl_80114D80/) {
|
|
print("got label\n");
|
|
$gotLabel = 1;
|
|
next;
|
|
}
|
|
|
|
if (!$gotLabel) {
|
|
next;
|
|
}
|
|
|
|
if ($line =~ /^\.asciz/) {
|
|
$gotLabel = 0;
|
|
next;
|
|
}
|
|
if ($line =~ /^\.endif/) {
|
|
$gotEndif = 1;
|
|
next;
|
|
}
|
|
|
|
if ($line =~ /\.*byte/) {
|
|
#print("line $line");
|
|
if ($line =~ /\.byte (0x..), (0x..), (0x..), (0x..)/) {
|
|
push(@b, hex($1), hex($2), hex($3), hex($4));
|
|
}
|
|
elsif ($line =~ /\.4byte (\w+)/) {
|
|
my $val = hex($1);
|
|
push(@b,
|
|
($val >> 24) & 0xFF,
|
|
($val >> 16) & 0xFF,
|
|
($val >> 8) & 0xFF,
|
|
($val >> 0) & 0xFF,
|
|
);
|
|
#print("$val\n");
|
|
}
|
|
else {
|
|
print("bad\n");
|
|
}
|
|
#print($line);
|
|
}
|
|
|
|
if ((scalar @b) == 4) {
|
|
print("{");
|
|
printf(" %s,", u16(@b[0..1]));
|
|
printf(" %s},\n", u16(@b[2..3]));
|
|
# printf(" %s,\n", float(@b[4...7]));
|
|
# printf(" %s,\n", float(@b[8...11]));
|
|
# printf(" %s,\n", float(@b[12...15]));
|
|
# printf(" %s,\n", float(@b[16...19]));
|
|
# printf(" %s,\n", float(@b[20...23]));
|
|
# printf(" %s,\n", float(@b[24...27]));
|
|
# print("},\n");
|
|
@b = ();
|
|
}
|
|
|
|
if ($line =~ /lbl_80114DBC/) {
|
|
break;
|
|
}
|
|
}
|