pln($templl);
}
+sub b2xh ($$) {
+ my ($bin,$orin) = @_;
+ return sprintf "0x%02x", (oct("0b$bin") | $orin);
+}
+
sub process_line () {
chomp;
$origprotoline= $_;
next unless defined $dirn;
next unless m/^ ([<>]) / && $1 eq $dirn;
die if m/\t/;
- die unless m/^ [<>] ([01A-Za-z. ]+?) +(\S.*)$/;
+ die unless
+ m/^ [<>] ([01A-Za-z. ]+?)(?: +|\s+\([+? A-Z0-9a-z]+\)\s+)([^() \t\n].*)$/;
$msg= $1; $rhs= $2;
- $rhs =~ s/^\([A-Z][0-9A-Z]+\) +//;
next if $rhs =~ m/^\}/;
next if $msg =~ m/\.\.\./;
$rhs =~ m/^([A-Z]+)\s/ or die "$rhs?";
$msg =~ s/ //g;
if ($msg =~ m/^0[01]{7}$/) {
$opcode= $&;
+ $opcodemask= '11111111';
$arglen= 0;
$ybit= 0;
} else {
$msg =~ m/^(0[01][01_]{6})$/;
$opcode= $1;
die if $opcode =~ m/_[01]/;
+ $opcodemask= $opcode;
+ $opcodemask =~ y/01_/110/;
$opcode =~ s/_/0/g;
$arglen= $msg;
$arglen =~ s/[01]//g;
$v{yn}= $yval;
$v{dname}= $dname;
$v{cname}= $cname;
+ $v{noiselevel}=
+ ($cname =~ m/nmradone/ ? 3 :
+ $cname =~ m/p[io]ng/ ? 2 :
+ $cname =~ m/detect/ ? 2 :
+ 0);
$v{cnameyn}= $cname.$yval;
- $v{opcode}= sprintf "0x%02x", oct("0b$opcode");
- $v{opcodeyn}= sprintf "0x%02x", (oct("0b$opcode") | $ybit * $yval);
+ $v{cnameynu}= uc($cname.$yval);
+ $v{opcode}= b2xh($opcode, 0);
+ $v{opcodeyn}= b2xh($opcode, $ybit * $yval);
+ $v{opcodemask}= b2xh($opcodemask, 0);
+ $v{opcodemaskyn}= b2xh($opcodemask, $ybit);
$v{arglen}= $arglen;
$v{arglentf}= sprintf "%d", !!$arglen;
expand_and_write();