chiark / gitweb /
sane handling of incoming detections
[trains.git] / hostside / parse-proto-spec
index 5865e425aa0d64dcc2659aeeca970c04bf64735f..0dc083d0d5a0c7fc5a5d8e3ec8d83fceb598c881 100755 (executable)
@@ -53,9 +53,9 @@ sub process_line () {
     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?";
@@ -92,7 +92,13 @@ sub process_line () {
        $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{cnameynu}= uc($cname.$yval);
        $v{opcode}= b2xh($opcode, 0);
        $v{opcodeyn}= b2xh($opcode, $ybit * $yval);
        $v{opcodemask}= b2xh($opcodemask, 0);